本帖最后由 datreexia 于 2010-12-13 16:25 编辑
uc的消息机制有些地方还是没有领悟,不怕拍砖,说说我的观点。
粗略看了uc的源代码,发现所谓的消息邮箱和队列使用的都是指针 既然是指针就必须要有一个实际的地址,就要为这个数据开辟存储空间,在不需要存储的应用中显得多此一举。
如,某任务接收串口的数据,来一个数据就传走一个数据,没必要存储,使用局部变量即可。而在uc中就要先定义一个静态的变量,将它的指针发送给消息邮箱或队列。还要额外注意这个静态变量是否被修改的问题。若直接传送数据就不必考虑这么多。
又如,串口任务接收一些数据包,由于数据包种类很多,包长度不固定,另一个任务接收这些数据,若消息队列并不是指针的话,我可以直接将这些数据放到队列中,先入先出的读走。 而消息队列是指针的话我就要先建立一个缓冲区,还要想办法将这个数包的长度告诉接包的任务。感觉这样使用不流畅。(呵呵,可能是我没找到好的解决方法,侮辱了OS的作用。)
我问过几个同事,他们说vxworks等操作系统的消息和队列也是指针,我开始考虑用指针的好处。
1、便于移植
因为实际的数据长度不定,而对于同一个系统指针长度是固定的,所以移植时不需要改动代码;
2、一次 “传递”的数据多(效率高)
如,可以传输一个字符串;
3、待补充...
缺点:
1、有些应用占用资源多,因为每个消息都要开辟存储空间;
2、存在潜在的危险,在消息传递过程中数据被修改; |