通过RT-Thread的源码可知 DMA buffer 和 serial 的 ringbuffer 公用一个 buffer. 我发送的数据长度为129,发送间隔>250ms(就是象征性表示这个速度不快),连续发几帧(没摸到规律,一般是4帧有时候也不一定),就会出现这个问题. 当然之前发送的是192+bytes的数据,现象一样的. hard faultonhandler bus fault:SCB_CF...
thread = rt_thread_create("thread1", thread_entry, (void *)10, THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE); if (thread != RT_NULL) rt_thread_startup(thread); /* 创建 t2 线程 */ thread = rt_thread_create("thread2", thread_entry, (void *)20, THREAD_STACK_SIZE, THREAD...
RT-Thread 不对中断服务程序所需要的处理时间做任何假设、限制,但如同其他实时操作系统或非实时操作系统一样,用户需要保证所有的中断服务程序在尽可能短的时间内完成(中断服务程序在系统中相当于拥有最高的优先级,会抢占所有线程优先执行)。这样在发生中断嵌套,或屏蔽了相应中断源的过程中,不会耽误嵌套的其他中断处理过...
ARM Cortex-M内核的中断是不受RT-Thread管理的,所以RT- Thread中的中断使用其实跟裸机差不多的,需要我们自己配置中断,并且使能中断,编写中断服务函数,在中断服务函数中使用内 核IPC通信机制,一般建议使用信号量、消息或事件标志组等标志事件的发生,将事件发布给处理线程,等退出中断后再由相关处理 线程具体处理中断。...
2.RT-Thread 中断工作机制 2.1中断向量表 2.2.中断处理过程 3.RT-Thread 中断管理接口 4.全局中断开关使用示例 1.中断管理 当CPU 正在处理内部数据时,外界发生了紧急情况,要求 CPU 暂停当前的工作转去处理这个 异步事件。处理完毕后,再回到原来被中断的地址,继续原来的工作,这样的过程称为中断。实现这一功能的系...
一个开发板上的RT-Thread的启动流程可能是首先从bsp当中链接脚本指定的startup_xxx.S中的入口函数(ENTRY)或者复位异常处理函数(ResetHandler)开始运行,这部分我们在讲bsp支持时会详细讲解。 之后跳入entry函数(GCC,使用不同编译器会进入不同的函数)执行,这里也可以跳入用户自己的main函数,但是需要...
RT-Thread USB学习实践系列 背景 最近在调试RT-Thread的代码时,使用了LOG_D这样的基于串口输出的调试方式进行调试信息或错误信息的打印。 调试的LOG输出,在代码发布时,不需要逐行的注释掉,只需要更改DBG_LEVEL,可以【一键关闭所有LOG,或LOG分级过滤输出】,大大提高调试效率。 大部分的代码,是调试出来的,LOG是比较实...
GD32的BSP架构主要分为三个部分:libraries、tools和具体的Boards,其中libraries包含了GD32的通用库,包括每个系列的HAL以及适配RT-Thread的drivers;tools是生成工程的Python脚本工具;另外就是Boards文件,当然这里的Boards有很多,我这里值列举了GD32103C-eval。
死机原因hardfault,bus fault,不过,经过耐心的分析,很快发现初始化的线程结构体数据不正确,原来是局部...
本文主要介绍RT-thread中IIC总线设备驱动,涉及到的主要文件有:驱动框架文件(i2c_core.c,i2c_dev.c,i2c-bit-ops.c,i2c_dev.h,i2c.h);底层硬件驱动文件(i2c_soft.c,i2c_soft.h)。这里的i2c_soft.c和i2c_soft.h是指利用MCU的GPIO口模拟IIC总线时序,而不是利用MCU的硬件IIC接口。应用IIC总线设备驱动时,需要...