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