之前一直跑裸机,现在想跑跑RTOS,但是总觉得有时难以摆脱裸机编程时的一些思维。
1.上了FreeRTOS后到底还能不能使用全局变量?裸机时不同任务之间的信息传递几乎都是通过使用全局变量来完成的,比较典型的就是串口空闲中断+DMA接收数据,直接定义一个全局数组,在中断中写入接收的数据,其他任务读取数据时随拿随用,效率高。FreeRTOS中可以通过消息队列将串口接收的数据传送给其他任务,或者也可以通过二值信号量来做一个接收数据并解析数据的任务?
2.中断优先级。配置了几个FreeRTOS无法屏蔽的高优先级中断,这些中断中不能调用FreeRTOS的API,如果这些中断中又不得不和FreeRTOS中的其他任务通讯怎么办?比如说开启了输出比较中断,在中断中对PWM脉冲计数,其他任务需要读取当前脉冲个数,这时候是不是就必须得使用了全局变量了?
3.任务切换。通过osDelay()函数切换任务,如果osDelay(0),还是每隔1ms的时钟节拍切换任务,这个在函数后面的注释中有解释。如果把 osDelay() 注释掉是不是表示这个任务一直运行,不会进入阻塞?(除了其他高优先级任务)
|