初级会员
- 积分
- 190
- 金钱
- 190
- 注册时间
- 2015-7-22
- 在线时间
- 122 小时
|
1金钱
最近在将一个协议栈移植到FreeRTOS系统上。之前的协议栈是基于前后台系统开发的,在串口接收中断将接收到的数据写入一个环形缓存区,再根据协议从这个缓存区中读出一帧数据,将数据转义和解析,将最后解析出的消息写入一个接收消息环形缓存区;发送数据时,将数据打包成一条消息并写入消息发送缓存区,从消息发送缓存区读出一条消息后,封包,转义,写入串口发送队列,通过轮询或者中断形式将数据发送出去。这里面的环形缓存区全部都是用全局数组做的,在前后台系统中使用没有什么问题。那么移植到RTOS环境下时,有诸多疑问如下:
1.串口接收缓存区和发送缓存区使用全局数组问题应该不大,因为不管什么时候只会有一个任务对这块内存进行读写。一个任务或者ISR读,一个任务或者ISR写。这样理解是否正确?
2.如果将上述前后台编程思想写出的协议栈移植到RTOS下,为了移植方便,是不是紧紧需要消息发送buf的操作做临界区护就行?因为在RTOS下会有多个任务需要往消息发送缓存中填写数据。这块消息发送缓存实质上就变成了若干任务的共享内存。当访问该内存时虽然可以进行临界区保护(原子操作),但是貌似还是会出问题!比如A任务在访问这块共享内存的时候,B任务也需要访问,但是此时操作被保护了,那就只能等到A任务访问结束后才能访问。这是不是就意味着A在写入数据的整个过程中都不能被打断(整个写入数据的函数都需要被临界保护),一但写入的数据过多,过于频繁是不是就会严重影响系统的实时性?这样是不是意味着使用RTOS的情况下,共享内存的形式不是很适用?
3.按RTOS的思维的话是不是应该发送消息缓存设计成消息队列?需要写入数据的任务通过消息队列将数据发送给发送任务?
总的来说,全局数组和全局变量之类的数据结构会对RTOS带来什么样的影响?
|
|
|