嵌入式OS应用的几个疑问
裸奔时各模块通信或交换数据基本用全局变量实现,使用OS后要尽量不使用全局变量。比如一个系统AD负责采集数据,i2c接口的eeprom和rtc,还有lcd显示ad的数据和rtc时间。
ad采集的数据要经过计算(计算过程需要到eeprom中的数据)后得到最终需要显示出来的数据。
当然不用OS也不麻烦
如果用OS的话如何处理?
比如显示,方法:
1 设置一个lcd信号量,需要显示时先拿到信号量再显示。
2 显示作为一个独立任务,需显示时,发消息(包括要显示的数据),显示任务收到消息后显示。
3 AD采集的数据放到全局变量里,显示任务需要更新显示时直接使用全局变量的数据。感觉这种方法不好。
那种方法好?或者有什么更好的方法?
还有一个问题是i2c的使用,很显然是不能同时使用的,甚至使用时是不允许中断的(可能是io模拟)。方法:
1 使用一个高优先级的任务独立处理i2c读写,其它任务需要读写eeprom或rtc时给该任务发消息然后等待回传消息。
2 设置一个i2c信号量,其它任务需要读写eeprom或rtc时现等待并取得该信号量。这样的话就有可能比高优先级的任务中断,要么就的禁止任务切换。
那种方法好?或者有什么更好的方法?
刚学os,请各位指教,多谢? 请教 自顶 每个OS都会有它自己的信号机制 回复【3楼】jdh99
-----------------------------------------------------------------------
多谢回复
每个os都有自己的机制
我的问题还和具体os无关,是个思路的问题。是从裸机到os的过渡时的编程习惯的问题。 看看周航慈 的书吧。上面讲的有了 下了一跳
http://cache.amobbs.com/bbs_upload782111/files_38/ourdev_633418POBT7R.JPG
看看第一条 (原文件名:zhou.JPG) 回复【6楼】huy666
-----------------------------------------------------------------------
为何? LCD和其他任务之间使用消息邮箱或消息队列通信。有数据需要显示时,发送消息。LCD得到消息就执行;
或者开辟一个显存区,用信号量管理;
软件模拟I2C应该是属于原子操作的,相当于共享资源中的临界区。所以用信号量保证互斥访问。 多谢楼上 周航慈的书不错
页:
[1]