小苏打可以用什么代替| 花枝招展什么意思| 中秋节送什么水果好| 复查肺结节挂什么科| 学字五行属什么| 女人脱发是什么原因| 大便干燥一粒一粒的吃什么药| ipadair2什么时候上市的| 为什么没有西京| 微信上面有个耳朵是什么意思| 什么叫同型半胱氨酸| 米西米西什么意思| 大张伟的真名叫什么| 热淋是什么病| 头发没有光泽是什么原因| 怀孕肚子痒是什么原因| 远水解不了近渴什么意思| 血小板过低有什么危害| 老来得子是什么意思| 6月6日什么星座| 庆五行属什么| 土豆是什么科| 胸痹是什么意思| 卫字五行属什么| 什么香什么鼻| 乌鸡白凤丸男性吃治疗什么| 一什么声音| 什么是天珠| 牛仔裤配什么上衣好看| 血清是什么意思| 二甲双胍缓释片什么时候吃最好| proof是什么意思| 狗吐了是什么原因| 鼻基底填充用什么材料比较好| 打鸡血是什么意思| 隆胸有什么危害和后遗症吗| 汉子婊什么意思| 肌酐高是什么问题| 心肌缺血有什么症状| 牙龈肿痛看什么科| 肾炎的症状是什么| 绘本是什么意思| 吃什么水果补气血| 智商什么意思| 产后可以吃什么水果| 有缘无分是什么意思| 什么可以误诊为畸胎瘤| 什么补血效果最好最快| 什么时候跑步减肥效果最好| 治骨质疏松打什么针| 红颜知己是什么关系| 紫外线过敏吃什么药| 绿意盎然是什么意思| 自省是什么意思| 壅是什么意思| 招财猫鱼吃什么| 墨西哥说什么语言| 澳门打车用什么软件| 耍小聪明是什么意思| 最大的哺乳动物是什么| 肺主什么| 做包子用什么面粉| 8月30号是什么星座| 人生海海是什么意思| 彪子是什么意思| 什么血型是万能血型| 什么是白平衡| 虎口长痣代表什么| 早上7点到9点是什么时辰| 佛跳墙是什么东西| 四川九寨沟什么时候去最好| 什么叫换手率| 保育是什么意思| 怀孕分泌物是什么样的| 腺体肠化是什么意思| 什么食物胶原蛋白含量高| 93岁属什么生肖| 肩膀发麻是什么原因| 去三亚需要什么证件| 天龙八部是指佛教中的什么| 秦二世为什么姓胡| 为什么打雷| 什么是癔病| 指南针是什么时候发明的| 阴道是什么味道| 什么是肾炎| 棉花什么时候传入中国| 头发干枯毛躁用什么洗发水| 早晨起来口干口苦是什么原因| 补牙用什么材料最好| 叶赫那拉氏是什么旗| 胰腺在人体什么位置| 白细胞酯酶阳性是什么意思| 躯体形式障碍是什么病| 矢车菊在中国叫什么名| 腹胀吃什么药| 阳历1月份是什么星座| 胃上面是什么器官| 白带什么样| 氧化钙是什么| cho是什么| 老是掉发是什么原因| 减肥喝什么茶最好最快| 小孩胃疼吃什么药好| 男人眼袋大是什么原因造成的| 降血脂吃什么| 乳房里面有硬块是什么原因| 奴仆宫是什么意思| 生殖疱疹吃什么药不复发| 坐骨神经痛挂什么科| 痤疮是什么意思| 心肌炎挂什么科| 什么牌子的奶粉最好| 冬虫夏草生长在什么地方| 眼睛雾化的作用是什么| 4月16日是什么星座| 香精是什么东西| 声音的传播需要什么| 用什么洗头白发能变黑| mo是什么元素| 乾隆和康熙是什么关系| 学生早餐吃什么方便又营养| 副市长是什么级别| 银耳钉变黑了说明什么| 检查血液挂什么科| 春秋鼎盛是什么意思| 梦见和婆婆吵架是什么意思| 耳返是什么| 联手是什么意思| 羽字五行属什么| 耳朵发炎吃什么消炎药| 心肾不交失眠吃什么中成药| 治疗呼吸道感染用什么药最好| 小肠气是什么症状| 克汀病是什么病| 怀孕吃什么水果最好| 乙肝两对半是什么意思| 为什么妇科病要肛门塞药| 牛不吃草是什么原因| 咳嗽痰中带血是什么原因| 抽动症是什么原因造成的| 微创人流和无痛人流有什么区别| 什么是一体机| 996什么意思| 5点至7点是什么时辰| 石敢当是什么神仙| 衣原体感染吃什么药| esse是什么牌子的烟| 土克什么| 梅毒滴度是什么意思| 女人肝火旺吃什么好| 贞操是什么意思| 手指变形是什么原因| 梦见长牙齿预示着什么| 呼吸困难胸闷气短挂什么科| 喝莓茶有什么好处| 爱被蚊子咬是什么体质| 参事是什么级别| 你会不会突然的出现是什么歌| 旺字五行属什么| 晚上难入睡是什么原因| 口干口臭什么原因引起的| 交友是什么意思| 盛夏是什么时候| 豁出去了什么意思| 阿托品属于什么类药物| 为什么容易中暑| 3.1号是什么星座| grader是什么意思| 颉在姓氏里念什么| 42属什么| dr是什么| 包场是什么意思| 舌头紫红色是什么原因| 什么叫健康| 洋字五行属什么| 中性粒细胞绝对值高是什么原因| 告人诈骗需要什么证据| 哪吒是什么意思| 梦见手表是什么意思| 房颤吃什么药最好| 夏天为什么不能喝红茶| 什么有什么造句| 集锦是什么意思| 开宠物医院需要什么条件| 长期做梦是什么原因| 尿生化是查什么的| 发烧挂什么科| 海棠什么时候开花| 蛔虫是什么意思| 毛孔粗大用什么洗面奶好| 唐氏筛查是检查什么| 虾仁炒什么好吃又简单| 辅警是什么| 鼻子干燥吃什么中成药| 除湿气吃什么| 华萨尼男装是什么档次| 上将相当于什么级别| 医学上cr是什么意思| 什么是疱疹| 缘分使然是什么意思| 尿液检查红细胞高是什么原因| 蓝色小药丸是什么| 笔记本电脑什么牌子好| 狗牯脑茶属于什么茶| cm和mm有什么区别| 印记是什么意思| 777是什么意思| 周遭是什么意思| 突然不硬是什么原因| 鲜字五行属什么| 山东简称为什么是鲁不是齐| 猪肝和什么菜搭配吃好| 餐中服用是什么意思| 指的是什么| 做梦梦见狼是什么意思| 禾字加一笔是什么字| 血压高什么症状| 阵容是什么意思| 春天都有什么花开| 猫发出咕噜咕噜的声音是什么意思| 组cp是什么意思| 眼睛上火吃什么药| 什么是腹式呼吸的正确方法| 精彩是什么意思| 投诉医院打什么电话| 珍珠是用什么做的| 胳膊疼痛是什么原因| 做肝功能检查挂什么科| 力不从心什么意思| 常熟有什么好玩的地方| 荔枝有什么寓意| 心电图异常q波什么意思| 红月亮是什么兆头| 猫牙米是什么米| 美尼尔氏综合症是什么病| 吃什么排宿便清肠彻底| 放屁是热的是什么原因| 澄字五行属什么| 为什么冬吃萝卜夏吃姜| 吃饭快的人是什么性格| 鱼日羽念什么| s 是什么意思| esrd医学上是什么意思| 自主意识是什么意思| 特殊是什么意思| 什么为力| 2月份生日是什么星座| 颈部ct能检查出什么| 胎盘老化对胎儿有什么影响| 外耳道疖肿用什么药| 过奖了是什么意思| 孢子是什么| 微醺是什么状态| 弱精吃什么能提高活力| 卒中优先是什么意思| 侏儒症是什么原因引起的| 相形见拙什么意思| 属龙的今年要注意什么| 平纹布是什么面料| 为什么北极没有企鹅| 滴滴是什么意思| 舌息心念什么| 喝中药为什么会拉肚子| 百度

新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > AVR单片机的RTOS-AVRX应用

全款买房拿不到钥匙相关新闻

——
作者:北京航空航天大学 卫进 时间:2025-08-04 来源:21IC.COM 收藏
引 言    

随着技术的发展,的设计及应用对人们的生活产生了很大的影响,并将逐渐改变人们未来的生活方式。在特定的操作系统上开发应用程序,可以使开发人员忽略掉很多底层硬件细节,使得应用程序调试更方便、易于维护、开发周期缩短并且降低开发成本,因而嵌入式操作系统深得开发人员的青睐。     

微处理器是Atmel公司开发的8位嵌入式RISC处理器,它具有高性能、高保密性、低功耗、非易失性等优点,而且程序存储器和数据存储器可独立编址,并具有独立访问的哈佛结构。内核有丰富的指令集,通过32个通用寄存器直接与逻辑运算单元相连接,允许在一个周期内一条单一指令访问两个独立的寄存器,这样的结构使代码的执行效率比传统的复杂指令集微处理器快了将近lO倍。    

X是由lbarello编写的源码公开的嵌入式操作系统,它专门针对AVR系列的RTOS,具有免费和可以修改的特点。它的缺点是由于做为一种专用的操作系统很难移植到其他平台上。 

1 AVRX系统的特点 

AVRX做为AVR专用RTOS有如下的特点:    

◆完全支持占先式、优先级驱动的任务调度算法;    
◆16个优先级,相同的优先级的任务采用Round-robin调度算法轮流执行;    
◆信号量可以用于信号传递、同步和互斥信号量,支持阻塞和非阻塞语法;    
◆任务之间可以用消息队列相互传递信息,接收和确认消息可以用阻塞和非阻塞调用;    
◆在中断子程序中,大部分非阻塞的中断服务程序可以使用;    
◆支持单个定时器的时间队列管理,任何进程都可以设置一个定时器,并且任何一个任务都可以等待定时器时间到;    
◆支持单步调试运行着的进程;    
◆程序空间小,包含所有功能的版本占用1000字节;    
◆与定时器/计数器有关的一些事务可以用AVRX写成任务级代码。

1.1任务

AVRX2.6为了支持c语言,保存了所有的32个寄存器。最小的上下文是32个寄存器、SREG和PC,总共35个字节。AvrxInitTask()函数给所有的寄存器初始化为0X00。只有进程上下文保存在任务堆栈中,所有其他的使用(包括内核和中断)保存在内核堆栈。这样降低了第一个中断的上下文切换和进入内核API的SRAM消耗。随后的中断(如果允许中断嵌套)嵌入内核堆栈,API不进行上下文切换。

1.2信号量    

信号量是SRAM指针,它们有三种状态:PEND、WAITING和DONE。当一个进程被一个信号量阻塞时,它处于WAITING状态,多个任务可以排队等候一个信号量。在后一种情况下,信号量可以看作互斥信号量。提供的AP函数如下:

AVRXSetSemaphore、AvrXIntsetSema-pore、AvrXWaitSemaplaore、AvrXTestSemapIlorc、AvrX-IntTestSemaphore和AvrxResetSemaphore。 

1.3定时器    

定时器控制块(TCB)长度为4(或6)个字节。它们管理一个16位计数值。定时器队列管理器管理一个分类的定时器队列,每个都调整为所有计数器的和到其延时需要的值。提供的API函数如下:AvrXStartTimer、AvrXTim-erHandler、AvrXCancel Timer、AvrXWaitTimer、AvrX-TestTimer和AvrXDelay。

1.4消息队列    

消息队列用消息控制块(MCB)做为队列首地址。任何进程、中断处理函数和多个进程都可以等待消息。MCB的长度是2或4个字节,消息可以认为是灵活性更大的信号量。提供的API函数如下:

AvrXSendMessage、AvrXIntSendMessage、AvrXRecvMessage、AvrXWaitMes-sage、AvrXAckMessage、AvrXTestMessage和AvrXWait-MessageAck。

1.5单步运行支持    

通过重新汇编内核AVRX,可以允许和禁止单步运行的支持。单步运行可以通过编译内核库时定义下面的变量:#define SIGNALSTEPSUPPORT。在能够单步运行以前,进程必须先暂停。有两种方法实现:一是仅仅初始化进程但不使能;二是用目标进程的ID调用AvrXSuspend,一旦目标进程挂起,调试SPI就能使用了。提供的API函数有:AvrxStepNext和AvrXSin-gleStepNext。

1.6系统对象    

AVRX是围绕系统对象的概念而构建的。系统对象包括一个链接和其后面的0个或者若干个字节的数据信号量。进程对象可以根据运行队列和信号量排队。计数器控制块只能根据计数器队列排队。消息控制块只能在消息队列排队。进程根据嵌入对象的信号量等待这些对象。进程堆栈中可用的SRAM是限制系统规模的主要因素,每个进程都需要至少10~35字节的空间来存储进程上下文。提供的API函数如下:

AvrXSetObjectSama-phore、AvrXIntObjectSamaphore、AvrXResetObiectSama-phore、AvrXWaitObjectSamaphore、AvrXTestObjectSama-phore和AvrXInfTestObjectSamaphore。

1.7系统堆栈    

AVRX需要足够大的堆栈来处理所有可能的中断嵌套。每次进入内核将会把10~35字节压进堆栈(标准上下文和返回地址),中断处理可能压进去更多。AVRX的API会临时压入2个以上的字节。GCC或者汇编代码定义于SRAM的顶部,保证AVRX的堆栈在有效SRAM空间之内是设计者的工作。 

2 AVRX系统的应用

2.1 AVRX在不同型号AVR上的移植
 

下面以ATmegM6为例,介绍移植工作。

(1)编译器的选择    

由于AVRX的编者是在GNU推出的AVR-GCC编译器下编写的,所以选用AVR-GCC编译器可以大大提高AVRX在不同AVR单片机上的移植特性。

(2)重新编译AVRX内核    

为了将应用程序成功编译,需要重新编译AVRX内核,重新编译包括下述步骤。    

①重新修改AVRX源码的Makefile文件,需要修改的几处如下:   

      

②重新修改AVRX源码的serialio.S文件,即根据不同的单片机修改串口部分的寄存器定义。需要增添如下代码:  百度 后裔是什么意思

     

③重新编译内核。具体做法是复制一个“命令提示符”到AVRX目录下,运行“命令提示符”,键入“makegcc”命令后运行就完成了AVRX内核的重新编译,会生成很多的.o文件和avrx.a文件。这些文件在以后的应用程序中会使用。    

至此就完成了AVRX在ATmegal6单片机上的内核移植,接着就可以编写应用程序了。

2.2在AVRX上编写应用程序    

这时候要用一个新的makefile文件,同时自己的程序可以不和AVRX的内核在一个目录,但是要指出依赖文件的明确路径。makefile的框架可以采用Winavr的sam-ple文件夹下的makefile文件框架。这里的难点其实还是makefile文件的语法问题。下面介绍应用程序的makefile文件在实例中需要修改或增加的代码:

    

3  系统测试

3.1  系统实时性测试


在实时系统中,实时系统的实时性表现在系统对外部事件的响应能力上。系统通过中断来响应外部事件的发生,并且在用户中断程序中做的事要尽量少,把大部分工作留给任务去做,只是通过信号量或者消息机制来通知任务运行。Mega16的定时器2设为比较匹配输出模式,在匹配时间到了之后产生一定周期脉冲输出,并产生中断。设置定时器1为计数模式来计数产生的脉冲输出。通过定时器2的比较匹配中断服务子程序来发信号量通知任务运行,并在中断子程序中不开中断,而在任务得到信号后开中断,以实现中断处理与任务运行的同步。任务中对一个全局变量计数,以记录任务执行的次数。运行一段时间后,在设置的匹配时间里,任务的运行次数和定时器1的计数一样,则系统在这段时间里是能完全响应外部事件的。当定时器2的比较匹配时间设为大于23 μs时,2个计数是相等的;当小于23 μs时,定时器1计数值大于任务计数值,说明任务没有完全得到响应。这说明中断的进入和返回即系统对外部时间的响应和处理时间为23 μs,远远大于其他操作系统在AVR单片机上移植后的响应时间。

3.2应用例程测试    

这里只对源文件中的几个例程先进行简单的编译,然后去掉不必要的代码,加入自己想测试的一些代码,进行了定时器控制模块、信号量和消息队列以其简单组合的测试,均在ATmega16上达到了预期的效果。 

4  心得体会

AVRX的源码都是用汇编语言编写的,相对来讲代码效率很高,但是由于没有详细的API介绍文档,所以最好的入门方法就是先读懂RTOS的源码和例程,然后进行修改,再加上自己的代码逐渐熟练应用。 
   
②AVRX需要分配的堆栈为35个字节加上任务代码需要的额外堆栈,具体的大小取决于每个进程用的本地变量个数。比较好的确定分配给任务堆栈大小的方法是:分配很大的堆栈(如70字节),运行一段应用程序后看堆栈到多深(因为GCC启动时把所有内存都清0了,这样很容易看到)。不过,为了安全起见,用编译器或仿真器在估计堆栈的顶端写入几个字节的0xFFFFF去验证到底达到了多少字节,然后分配给比测试结果多两个以上的字节给这个任务。    

③启动的最后一个指令必须跳转到Epilog()。

5  结论

AVRX是一个不错的RTOS,最显著的特点就是内核小,速度快,编译后大概只需500~700字节,且基本的调度功能一个也不少。由于其代码公开,结合不同型号AVR单片机的特性,可以在此基础上进行系统的裁减和扩展,使之能达到更好的效果。本文为AVR的应用提供了借鉴。



评论


相关推荐

技术专区

关闭
吃什么可以帮助睡眠 菌群失调是什么意思 续弦是什么意思 嗓子疼喝什么药 翘首以盼是什么意思
o型血和b型血的孩子是什么血型 女人梦见蛇是什么意思 已所不欲勿施于人是什么意思 血栓吃什么药 9月25日是什么星座
酮体是什么意思 宫颈炎盆腔炎吃什么药效果最好 ct检查是什么意思 甲胎蛋白是检查什么的 乌龟一般吃什么东西
子宫内膜粘连有什么症状 足字旁的有什么字 猪肚炒什么好吃 脑梗是什么意思 办什么厂比较好
子宫内膜息肉样增生是什么意思cj623037.com 犹太人是什么wuhaiwuya.com 肾囊肿有什么症状hcv8jop0ns1r.cn 春雨绵绵是什么生肖hcv8jop7ns7r.cn 甜瓜什么时候成熟hcv9jop3ns1r.cn
滥竽充数的充是什么意思hcv7jop4ns5r.cn venes保温杯是什么品牌hcv8jop8ns4r.cn 公务员是什么编制hcv7jop9ns3r.cn 视网膜为什么会脱落yanzhenzixun.com 竹字头均念什么名字hcv9jop1ns8r.cn
铁观音什么季节喝最好hcv7jop9ns1r.cn 对立面是什么意思hcv8jop5ns7r.cn 有迹可循什么意思hcv7jop6ns7r.cn 蒂芙尼属于什么档次hcv7jop7ns3r.cn 什么是胎梦hcv8jop1ns7r.cn
为什么天天晚上做梦hcv8jop0ns3r.cn ra是什么病bjcbxg.com sk-ll是什么牌子hcv9jop1ns6r.cn 6.28什么星座hcv8jop3ns0r.cn 喝普洱茶有什么功效hcv8jop5ns8r.cn
百度