- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
序 自从 03 年以来,对单片机的 RTOS 的学习和应用的热潮可谓一浪高过一浪.03年,在离开校园前的,非 典的那几个月,在华师的后门那里买了本邵贝贝的《UCOSII 》,通读了几次,没有实验器材,也不了了之。在 21IC 上,大家都可以看到杨屹写的关于UCOSII 在 51 上的移植,于是掀起了 51 上的RTOS 的热潮。再后来,陈明计先生推出的 small ro,ts展示了一个用在 51 上的微内核,足以在 52 上进行任务调度。 前段时间,在 ouravr上面开有专门关于 AVR 的 Rtos的专栏,并且不少的兄弟把自己的作品拿出来,着实开了不少眼界。这时,我重新回顾了使用单片机的经历,觉得很有必要,从根本上对单片机的 RTOS 的知识进行整理,于是,我开始了编写一个用在 AVR 单片机的 RTOS 。 当时,我所有的知识和资源有: Proteus6.7 可以用来模拟仿真avr系列的单片机 WinVAR v8基于 GCC A VR 的编译环境,好处在于可以在 C 语言中插入 asm 的语句 mega8 1的K ram 有 8K 的 rom,是开发 8 位的 RTOS 的一个理想的器件,并且我对它也比较熟悉。 写 UCOS 的 Jean J.Labross在e他的书上有这样一句话,“渐渐地,我自然会想到,写个实时内核直有那么难吗?不就是不断地保存,恢复 CPU 的那些寄存器嘛。” 好了,当这一切准备好后,我们就可以开始我们的Rtos for mega的8 实验之旅了。 本文列出的例子,全部完整可用。只需要一个文件就可以编译了。我相信,只要适当可用,最简单的就是最好的,这样可以排除一些不必要的干扰,让大家专注到每一个过程的学习。 第一篇:函数的运行 在一般的单片机系统中,是以前后台的方式(大循环+中断)来处理数据和作出反应的。例子如下: makefi的le设定:运行 WinAvr 中的 Mfile,设定如下MCU Type: mega8 Optimization level: s Debug formatVR:-ACOFF C/C++ source f选il译e:要编译的 C 文件 #include avr/io.h void fun1(void) { unsigned char i=0; while(1) { PORTB=i++; PORTC=0x01(i%8); } } int main(void) { fun1(); } 首先,提出一个问题:如果要调用一个函数,真是只能以上面的方式进行吗? 相信学习过 C 语言的各位会回答,No!我们还有一种方式,就是“用函数指针变量调用函数”,如果大家都和我一样,当初的教科书是谭浩强先生的《C 程序设计》的话,请找回书的第 9.5节。 例子:用函数指针变量调用函数 #include avr/io.h void fun1(void) { unsigned char i=0; while(1) { PORTB=i++; PORTC=0x01(i%8); } } void (*pfun)();指向//函数的指针 int main(void) { pfun=fun1; // (*pfun)();运行/指/针所指向的函数 } 第二种,是“把指向函数的指针变量作函数参数” #include avr/io.h void fun1(void) { unsigned char i=0; while(1) { PORTB=i++; PORTC=0x01(i%8); } } void RunFun(void (*pfun)()获) 得/了/ 要传递的函数的地址 { (*pfun)(); } 在 RunFun 中/,/ 运行指针所指向的函数 int main(void) { RunFun(fun1); 将函数的/指/ 针作为变量传递 } 看到上面的两种方式,很多人可能会说,“这的确不错”,但是这样与我们想要的RTOS ,有什么关系呢?各位请细心向下看。 以下是 GCC 对上面的代码的编译的情况: 对 main()中的 RunFun(fun1);的编译如下ldi r24,lo8(pm(fun1)) ldi r25,hi8(pm(fun1)) rcall RunFun 对 void RunFun(void (*pfun)的()编) 译如下 /*void RunFun(void (*pfun)())*/ /*(*pfun)();*/ .LM6: movw r30,r24 icall ret 在调用 void RunFun(void (*pfun)的()时) 候,的确可以把 fun1 的地址通过 r24 和 r25 传递给 RunFun()。但是,RTOS 如何才能有效地利用函数的地址呢? 第二篇: 人工
您可能关注的文档
- 简历中会用到的英文对照用语~绝对的有用.docx
- 简练易记的100条管理定律人才:.docx
- 简论天文学及其历史对人类的历史的影响.docx
- 简明实用——WORD中公式编辑器的使用方法详解——欢迎下载.docx
- 简谱2分析和总结.docx
- 简谱3分析和总结.docx
- 简谱4分析和总结.docx
- 简谱5分析和总结.docx
- 简谱6分析和总结.docx
- 简谱8分析和总结.docx
- 养老评估师中级行为面试题库及案例分析.docx
- 面试培训督导时考察其课程理解能力的题目.docx
- 税务专员面试中关于增值税政策的常见问题解答.docx
- 2025宁波市医疗保障局局属事业单位宁波市医疗保障基金管理中心招聘事业编制工作人员1人备考试题附答案.docx
- 2025咸宁市汉口银行咸宁嘉鱼支行招聘笔试历年题库附答案解析.docx
- 2025北京人才发展战略研究院招录笔试备考题库附答案.docx
- 2025四川成都市龙泉驿区青台山中学校秋季教师招聘22人笔试试题附答案解析.docx
- 2025台州市银龄讲学计划教师招募13人笔试参考试题附答案解析.docx
- 2025中国铁建公开招聘42人笔试题库附答案.docx
- 2025中智咨询研究院社会招聘笔试参考题库附答案.docx
最近下载
- 书愤(ppt)...ppt VIP
- 特斯拉电动执行器-反转行星丝杠中文样本.pdf VIP
- 生涯发展报告.pdf VIP
- 输变电工程造价管理标准化手册(工程结算).pdf VIP
- 2025年甘肃省庆阳市林业和草原局招聘专职聘用制护林员115人备考题库附答案详解.docx VIP
- 统编版高中语文选择性必修中册 实践是检验真理的唯一标准 课文课件.pptx VIP
- 一例慢性阻塞性肺疾病个案护理.pptx VIP
- 《实践是检验真理的唯一标准》 统编版高中语文选择性必修中册.pptx VIP
- 基于--J2EE架构在线招聘系统设计.doc VIP
- 2025年甘肃省庆阳市林业和草原局招聘专职聘用制护林员92人笔试模拟试题及答案解析.docx VIP
有哪些信誉好的足球投注网站
文档评论(0)