123五、嵌入式实时操作系统的分析.ppt

OS_EVENT *SemaphorePtr; OS_MEM *PartitionPtr; INT8U Partition[100][32]; OS_STK TaskStk[1000]; void main(void) { INT8U err; OSInit(); ... SemaphorePtr = OSSemCreate(100); PartitionPtr = OSMemCreate(Partition, 100, 32, err); OSTaskCreate(Task, (void *)0, TaskStk[999], err); OSStart(); } void Task (void *pdata) { INT8U err; INT8U *pblock; for (;;) { OSSemPend(SemaphorePtr, 0, err); pblock = OSMemGet(PartitionPtr, err); /* 使用内存块 */ ... OSMemPut(PartitionPtr, pblock); OSSemPost(SemaphorePtr); } } 谢 谢 各 位 学习动物精神 11、机智应变的猴子:工作的流程有时往往是一成不变的,新人的优势在于不了解既有的做法,而能创造出新的创意与点子。一味 地接受工作的交付, 只能学到工作方法 的皮毛,能思考应 变的人,才会学到 方法的精髓。 学习动物精神 12、善解人意的海豚:常常问自己:我是主管该怎么办才能有助于更好的处理事情的方法。在工作上善解人意, 会减轻主管、共 事者的负担,也 让你更具人缘。 * 任务、ISR和消息邮箱的关系 邮箱的系统服务(1) OSMboxCreate():创建一个邮箱 在创建邮箱时,须分配一个ECB,并使用其中的字段OSEventPtr指针来存放消息的地址; OS_EVENT *OSMboxCreate(void *msg); msg:指针的初始值,一般情形下为NULL。 OSMboxPend():等待一个邮箱中的消息 若邮箱为满,将其内容(某消息的地址)返回;若邮箱为空,当前任务将被阻塞,直到邮箱中有了消息或等待超时; OSMboxPend (OS_EVENT *pevent, INT16U timeout, INT8U *err); 邮箱的系统服务(2) OSMboxPost():发送一个消息到邮箱中 如果有任务在等待该消息,将其中的最高优先级任务从等待列表中删除,变为就绪状态; OSMboxPost(OS_EVENT *pevent, void *msg); OSMboxAccept():无等待地请求邮箱消息 若邮箱为满,返回它的当前内容;若邮箱为空,返回空指针; OSMboxAccept (OS_EVENT *pevent); OSMboxQuery():查询一个邮箱的状态 OSMboxQuery (OS_EVENT *pevent, OS_MBOX_DATA *pdata); 样例程序(1) OSMboxCreate()函数 OS_EVENT *CommMbox; void main(void) { ... OSInit(); ... CommMbox = OSMboxCreate((void*)0); ... OSStart(); } OSMboxPend()函数 void CommTask(void *pdata) { INT8U err; void *msg; pdata = pdata; for (;;) { ... msg =OSMboxPend(CommMbox, 10, err); if(err == OS_NO_ERR) { /* 收到消息时的代码 */ } else { /* 未收到消息时的代码*/ } } 样例程序(2) OSMboxPost()函数 OS_EVENT *CommMbox; INT8U CommRxBuf[100]; void CommTaskRx(void *pdata) { INT8U err; ... for (;;) {

文档评论(0)

1亿VIP精品文档

相关文档