- 1、本文档共13页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
uCOS II学习
uC/OS II学习最近一直在学习uC/OS II嵌入式操作系统,经过几天的摸索,终于将他移植到了STC51单片机上,虽然51上跑操作系统确实有点吃力,没什么实际应用意义,但还是蛮兴奋的。现将本人对内核的理解和心得记录下来。从哪里开始呢?从操作系统的概念说起?那肯定不现实,我也没有那么多的时间来写。就从main()函数开始说起,一层层的将内核剥开。Main()函数如下:void main(void){ OSInit(); //系统初始化 InitTimer0(); // Timer0初始化,Timer0作为系统时钟节拍源OSTaskCreate(job1, (void *)0, (void *)TaskStk[1][0],6); /*建立任务1 */OSTaskCreate(job2, (void *)0, (void *)TaskStk[2][0],7); /*建立任务2 */ OSStart(); /* 开始多任务调度 */}看起来很简单,先来分析一下:OSInit(); //系统初始化,这是个大头,接下来就讲他。InitTimer0(); // Timer0初始化,Timer0作为系统时钟节拍源,时钟节拍,不难理解,操作系统离不开它,这个简单,不忙讲。OSTaskCreate(job1, (void *)0, (void *)TaskStk[1][0],6); /*建立任务1 */OSTaskCreate(job2, (void *)0, (void *)TaskStk[2][0],7); /*建立任务2 */这是建立的两个任务,和内核关系不大,也简单,你先当他不存在。OSStart(); /* 开始多任务调度 */。这是内核级的,很重要,不过也简单,慢慢来,以后讲。下面我们就从OSInit()系统初始化,开始解析,系统初始化,主要的任务就是一.将系统定义的全局变量该清零的清零,该赋值的赋值。二.初始化任务控制块(TCB),建立空闲TCB三.创建空闲任务就这三个初始化的任务,我们一条一条说:一.将系统定义的全局变量该清零的清零,该赋值的赋值。看OSInit()函数的时候,你会看到很多的条件编译,我们只看必不可少的:OSTime = 0L; //系统时间清零(32位的) OSIntNesting = 0; //中断嵌套层数清零 OSLockNesting = 0; //任务锁定层数清零OSTaskCtr = 0; //任务计数器清零 OSRunning = FALSE; //任务运行标志置零OSIdleCtr = 0L; //空闲任务计数器清零OSCtxSwCtr = 0; //任务切换次数清零OSRdyGrp = 0; //任务就绪组清零for (i = 0; i OS_RDY_TBL_SIZE; i++) //任务就绪表清零{ OSRdyTbl[i] = 0; } OSPrioCur = 0; //当前任务优先级清零 OSPrioHighRdy = 0; //最高优先级清零二.初始化任务控制块(TCB),建立空闲TCB: OSTCBHighRdy = (OS_TCB *)0; //初始化最高优先级任务控制块 OSTCBCur = (OS_TCB *)0; //初始化当前任务控制块 OSTCBList = (OS_TCB *)0; //初始化任务控制块链表 for (i = 0; i (OS_LOWEST_PRIO + 1); i++) { OSTCBPrioTbl[i] = (OS_TCB *)0; //初始化任务控制块优先级列表 } for (i = 0; i (OS_MAX_TASKS + OS_N_SYS_TASKS - 1); i++) { OSTCBTbl[i].OSTCBNext = OSTCBTbl[i + 1]; //建立TCB单向链表 }OSTCBTbl[OS_MAX_TASKS + OS_N_SYS_TASKS - 1].OSTCBNext = (OS_TCB *)0;//链表末端指向0 OSTCBFreeList = OSTCBTbl[0]; //链表头指向OSTCBTbl[0]三.创建空闲任务,51的堆栈是向上增长的模式所以OS_STK_GROWTH ==0,建立空闲任务应该调用:?????? OSTaskCreate(OSTaskIdle, (void *)0, OSTaskIdleStk[
您可能关注的文档
最近下载
- 来法莫林药物市场调研报告202312.pdf VIP
- [煤矿标准]GBT 20475.3-2012 煤中有害元素含量分级 第3部 分砷.pdf
- 2024年山东威海初中学业水平考试生物试卷真题(含答案详解).docx
- 山东亚洲金属循环利用环保有限公司年处理30万吨废旧蓄电池.doc VIP
- 耐克森nexans卷筒电缆.pdf
- 广州某银行业务连续性管理办法.pdf VIP
- 人教鄂教版五年级上册科学期末综合训练(含答案).docx
- 如何玩转抖音.pptx VIP
- 2024必威体育精装版“学宪法讲宪法”知识竞赛题库与答案.pdf
- 2023年哈尔滨工业大学(深圳)计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案).docx VIP
文档评论(0)