话说 前两天 我重写了我板子的硬件操作接口
然后就出现了一个诡异的data_abort错误,roll back回去就没事。。。
单步跟踪的结果是 :问题出在进入设定的系统节拍定时器中断后,rt_timer_check()函数中,
当中断发生的时候 rt_timer_list 还是个空指针
很明显 对象还没有经过初始化 系统时钟的中断发生在了 timer初始化之前。
我看了看代码 问题应该是在这里:
这是一个通用的 rtthread_startup() ,基本上所有的bsp的rtthread_startup()都是如此
一般 我们都是在① rt_hw_board_init() 处初始化系统时钟定时器 打开时钟中断 启动定时器
但是 OS要到 ③处才能初始化timer对象
①→③中间 操作挺多的 ,特别是 rt_show_version() 一般这个时候我们输出设备工作在poll方式,就会在这个地方耗费不少时间。造成可能在③之前就发生时钟中断而出错。
正好我重写的硬件接口库文件速度较旧的为慢,特别是降低了串口的初始波特率,而引发了这个问题
我建议, 我们是不是应该在调整系统初始化定时器的位置 应该在rt_system_timer_init()之后进行?