rt_thread+STM32工作笔记

1.rt_thread_delay 为什么和ostick没有关系

时钟配置错误,程序定义了#define RT_USING_USER_MAIN
RT_THREAD 在进入自己的main.c之前 先进入components.c里面的main,在这个main(components.c中)函数会启动操作系统,获取系统时钟,但是
当前时钟还没初始化,所以默认内部的8M,因此把要在 rt_hw_board_init()里面先初始化系统时钟。

2.GNSS任务申请了大临时变量(超过任务堆栈),但是系统没有奔溃,申请变量的函数是在中断中执行的,但是也超过了 系统栈还是没有奔溃

答:一般CPU的栈增长方向是向下的, 堆的生长方向是向上的。 内存= 静态存储区+栈区+堆区。申请的大的变量在中断中 用的是系统堆栈,系统堆栈虽然比较小,没有奔溃的原因是,用到别的地方的堆栈,暂时没有被别的任务访问到 因此没有问题,当被占用的任务需要的堆栈变大后,也就是说不系统堆栈溢出使用此部分的时候,系统会冲突奔溃。需要把系统堆栈调大暂时定为5k

3.用HAL库+rt_thread,串口数据量大的时候出现串口没有响应的想象。

HAL库中 #define USE_RTOS 0 加了锁。
答:修改 #define USE_RTOS 1
定义 #define __HAL_LOCK(HANDLE) __NOP()
#define __HAL_UNLOCK(HANDLE) __NOP()
裸机会加 __HAL_LOCK(HANDLE) 会导致串口溢出错误
屏蔽 #error “USE_RTOS should be 0 in the current HAL release”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章