OSAL解读笔记.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
OSAL解读笔记课件

A 先粗看了一些东西如果某一个任务的event被置位了,就处理它。即 taskEvents[idx]!=0 而这个事件是由中断程序之类的设置的或者由某一任务设置的?只有有events事件发生的任务才去处理。没有事件发生的任务将跳过。系统信息,可能会发给本任务,这个用函数:Osal_msg_receve(simpleosal_taskID)就可以得知。猜想:当系统事件发生时,它会将一个全局变量中的事件数组的某一个与0x8000或运算,到底是哪一个就是我们的任务排列的序号来决定的,例如我们在本例子中有11个任务(后来我自已又加了一个)如果第2个任务要发系统信息运去,就将这个数组置为1。程序中的这样处理的: tasksEvents[task_id] |= event_flag; // Stuff the event bit(s)---见osal.c中。这个信息处理函数(带任务ID参数)它就是读这个全局变量,看这个是发给谁的。所以它先看有没有系统事件是发给本任务的,uint8 *osal_msg_receive( uint8 task_id ){ osal_msg_hdr_t *listHdr; ///队列指针,用于有哪些信誉好的足球投注网站的 osal_msg_hdr_t *prevHdr = NULL; ///前一个 osal_msg_hdr_t *foundHdr = NULL; ///发现的指针处 halIntState_t intState; ///这个不知是干什么用的 // Hold off interrupts HAL_ENTER_CRITICAL_SECTION(intState); ////进入 // Point to the top of the queue listHdr = osal_qHead; ////指向队列的前部 // Look through the queue for a message that belongs to the asking task while ( listHdr != NULL ) ////只要队列不空,就一直往下走 { if ( (listHdr - 1)-dest_id == task_id ) ///事件队列中的目标ID是指向本地ID否? { if ( foundHdr == NULL ) ///第一次发现消息是给自已的 { // Save the first one foundHdr = listHdr; ////发现一个消息是给自已的 } else { // Second msg found, stop looking 又发现一个 直接退出了 break; } } if ( foundHdr == NULL ) { prevHdr = listHdr; ///当前这个就是第一个 } listHdr = OSAL_MSG_NEXT( listHdr ); ///指向下一个 } // Is there more than one? if ( listHdr != NULL ) { // Yes, Signal the task that a message is waiting osal_set_event( task_id, SYS_EVENT_MSG ); } else { // No more 如果没有消息就告诉任务,现在没有系统消息 osal_clear_event( task_id, SYS_EVENT_MSG ); } // Did we find a message? if ( foundHdr != NULL ) ////将这个消息从中间抽出来让它消失掉,这时就要知道前一个 { // Take out of the link list osal_msg_extract( osal_qHead, foundHdr, prevHdr ); } // Release interrupts HAL_EXIT_CRITICAL_SECTION(intState); return ( (uint8*) foundHdr );}B再看一下操作系统,从中断到处理的过程现在基本理清了按键消息是如何发过来的,有

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档