点击这里给我发消息

点击这里给我发消息

点击这里给我发消息

首页 | 教学管理 | 校园生活 | 学校制度 | 教学模式 | 招生培训 | 阳光概况 | 成功学子 | 就业导航 | 技术园地 | 王牌专业 | 函授教学
  您当前的位置:湖南阳光电子技术学校 -> 技术园地 -> 综合维修园地 -> 文章内容
详解AVR微处理器如何令程序调试更简便
发布时间:2011-10-12 15:41:28  发布人:cswok
 

  引言

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

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

  AVRX是由1barello编写的源码公开的嵌入式操作系统,它专门针对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状态,多个任务可以排队等候一个信号量。在后一种情况下,信号量可以看作互斥信号量。提供的API函数如下:AvrXSetSemaphore、AvrXIntSetSemaphore、AvrXWaitSemaphore、AvrXtestSemaphore、AvrXIntTestSemaphore和AvrXResetSemaphore。

  1.3 定时器

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

  1.4 消息队列

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

  1.5 单步运行支持

  通过重新汇编内核AVRX,可以允许和禁止单步运行的支持。单步运行可以通过编译内核库时定义下面的变量:#define SIGNALSTEPSUPPORT。

  在能够单步运行以前,进程必须先暂停。有两种方法实现:一是仅仅初始化进程但不使能;二是用目标进程的ID调用AvrXSuspend,一旦目标进程挂起,调试SPI.html" target="_blank">SPI就能使用了,提供的API函数有:AvrXStepNext和AvrXSingleStepNext。

  1.6 系统对象

  AVRX是围绕系统对象的概念而构建的,系统对象包括一个链接和其后面的0个或者若干个字节的数据信号量。进程对象可以根据运行队列和信号量排队。计数器控制块只能根据计数器队列排队。消息控制块只能在消息队列排队。进程根据嵌入对象的信号量等待这些对象。

  进程堆栈中可用的SRAM是限制系统规模的主要因素,每个进程都需要至少10~35字节的空间来存储进程上下文。提供的API函数如下:AvrXSetObjectSamaphore、AvrXIntObjectSamaphore、AvrXResetObjectSamaphore、AvrXWaitObjectSamaphore、AvrXTestObjectSamaphore和AvrXIntTestObjectSamaphore。

  1.7 系统堆栈

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

  2 AVRX系统的应用

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

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

  (1)编译器的选择

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

  (2)重新编译AVRX内核

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

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

  ABSPATH=…/avrx /*更改AVRX原路径到实际路径下*/

  修改   MCU=8535

  AAVRMCU=1

  GCCMCU=at90s$(MCU)

  AVRXMCU=_AT90S$(MCU)_

  为    ICCMCU=m16

  AAVRMCU=3

  GCCMCU=atmega16

  AVRXMCU=_AT90Mega16_

  ②重新修改AVRX源码的serialio.s文件,即根据不同的单片机修改串口部分的寄存器定义。需要增添如下代码:

  #if defined(UBRRL)

  #define UBRR UBRRL

  #endif

  #if defined(UBRRH)

  sts UBRRH,p1h

  #endif

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

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

  2.2 在AVRX上编写应用程序

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

  MCU=atmega16 /*微处理器的名字*/

  TARGET=test /*应用程序文件名*/

  GCCLIB=$(AVRX)/avrx/avrx.a

  GCCINC=-L-I$(AVRX)/avrx-I$(AVR)/avr/inc /*加上相关的库*/

  SCANF_LIB_MIN=-W1,-u,vfscanf-1scanf_min

  SCANF_LIB_FLOAT=-W1,-u,vfscanf-1scanf_flt

  SCANF_LIB /*设置sacnf函数库的类型,在不使用时可以注释掉,这样可以减小编译后的文件大小*/

  LDFLAGS+=$(PRINTF_LIB)$(SCANF_LIB)$(MATH_LIB) /*新增的连接器参数设定*/

  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嵌入式系统的应用提供了借鉴。

[] [返回上一页] [打 印] [收 藏]

 相关网站搜索:

百度中找“详解AVR微处理器如何令程序调试更简便”的内容

GOOGLE中找“详解AVR微处理器如何令程序调试更简便”的内容

栏目导航

· 维修资料 · 综合维修园地
· 电脑维修天地 · 电子基础知识
· 音响维修园地 · 数码产品维修园地
· 笔记本园地 · 显示器维修园地
· 液晶电视维修 · 冰箱维修园地
· 空调维修园地 · 手机维修园地
· 电视维修园地 · 电工焊工园地
· 网络工程园地

 王 牌 专 业
· 电脑维修|液晶电视维修班(朝..
· 中级电工家电维修培训班
· 电工培训|中级电工培训
· 焊工培训|中级焊工培训
· 中级电工培训 + 中级焊工培训..
· 手机维修培训|湖南手机维修培..
· 家电维修培训|全能家电维修培..
· 电脑维修培训|电脑硬件维修培..
· IT通讯维修专业|电脑手机维修..
· 电脑电器维修专业|湖南电脑电..
· 家电通讯维修专业|湖南家电手..
· 精锐电子维修专业|全能电子维..
· 液晶电视维修培训|平板电视维..
· 制冷维修培训|空调冰箱维修培..
 

热门文章

· 电脑维修培训|电脑硬..
· 入学须知
· 2011年收费标准
· 家电维修培训|全能家..
· [图文] 电动车48V充电..
· [图文] 电工培训|中级..
· [组图] 学生生活安排..
· 电脑电器维修专业|湖..
· [图文] 就业安置流程..
· 精锐电子维修专业|全..

推荐图文

首页 阳光概况 王牌专业 教学管理 就业导航 成功学子 技术园地 招生资讯 精锐师资 综合讯息
  友情链接               ;    申请友情链接
电工培训网,电工培训,电工培训学校,维修电工培训,中级电工培训,电工证书培训,低压电工培训,电工培训机构,维修电工培训班,维修电工培训学校,电工培 训考证,高级维修电工培训,短期电工培训,电子电工培训,电工特种作业培训,初级电工培训班,中级电工培训学校,中级电工培训班,专业电工培训,水电工培 训,电工培训教材,电工培训视频,电工短期培训班,电工培训资料,电工技师培训,高级电工培训, 电工学校,维修电工学校,高级电工学校,,贵州电工学校,广西 电工学校,电工学校哪里好,江西电工学校,电工技术培训学校,维修电工培训学校,电工维修培训学校,电工技师培训学校,中级电工培训学校,电工焊工培训 学校,电工职业学校,电工考证培训学校,电工焊工学校,电工技术学校,高压电工培训学校,水电工培训学校,电工中级培训学校,电工技能培训学校,低压电工 培训学校,电工专业学校,江西电工培训学校,学电工技术,电工学习班,中级电工培训学校,中级电工培训班,专业电工培训, ,高级焊工学校,湖南焊工学校,焊 工专业学校,电工焊工培训学校,电焊工考证培训学校,湖南焊工培训学校,焊接学校,高级焊工培训,焊工技术培训,焊接培训中心, 电工焊工培训,电气焊工培 训,气焊工培训,焊工培训班,焊工培训考证,高级电焊工培训,专业焊工培训,焊工培训机构,焊工培训多少钱,高压焊工培训,电焊工培训内容,特种焊工培训 , 焊工培训取证,电焊工培训机构,焊工培训,电焊工培训教学大纲,焊工培训计划,焊工培训总结,电焊工培训资料,电焊工培训方案,电焊工培训课程,初级电焊 工培训大纲,电焊工培训课件,焊工培训资料,电焊工培训教材,电焊工培训计划,电焊工培训视频_面向全国招生!主要招生区域是:北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海 江苏 浙江 安徽 福建 江西 山东 河南 湖北 湖南 广东 广西 海南 重庆 四川 贵州 云南 西藏 陕西 甘肃 青海 宁夏 新疆 安庆 鞍山 安阳 安康 澳门 安顺 阿克苏 北京 包头 保定 白山 白城 本溪 滨州 保山 巴彦淖尔 百色 蚌埠 宝鸡 亳州 北海 白银 巴中 重庆 长沙 赤峰 长春 朝阳市 滁州 巢湖 池州 长治 常州 常德 沧州 崇左 承德 成都 潮州 郴州 大连 东莞 达州 丹东 大庆 大同 定西 德阳 德州 东营 鄂尔多斯 鄂州 佛山 福州 防城港 抚顺 抚州 阜阳 阜新 广州 桂林 广元 广安 固原 贵港 贵阳 赣州 哈尔滨 杭州 合肥 呼和浩特 海口 菏泽 邯郸 黄山 衡水 香港 呼伦贝尔 贺州 葫芦岛 淮北 淮南 淮安 湖州 鹤岗 黑河 河源 惠州 汉中 河池 怀化 黄冈 鹤壁 黄石 衡阳 海拉尔 济南 锦州 吉林 江门 济宁 佳木斯 鸡西 嘉兴 九江 揭阳 焦作 晋城 金华 荆门 吉安 景德镇 晋中 酒泉 嘉峪关 金昌 荆州 昆明 开封 克拉玛依 临沂 拉萨 廊坊 兰州 六安 洛阳 泸州 乐山 辽源 聊城 吕梁 龙岩 临汾 临夏 来宾 辽阳 丽水 六盘水 连云港 柳州 临沧 陇南 丽江 莱芜 娄底 漯河 凉山州 马鞍山 牡丹江 眉山 茂名 绵阳 梅州 南京 宁波 宁德 南充 南通 南宁 南昌 南平 南阳 平顶山 盘锦 莆田 萍乡 濮阳 攀枝花 普洱 平凉 齐齐哈尔 钦州 七台河 泉州 清远 衢州 秦皇岛 曲靖 庆阳 青岛 日照 荣成 上海 深圳 商丘 沈阳 内江 随州 三门峡 三明 十堰 绍兴 韶关 邵阳 石嘴山 遂宁 汕头 双鸭山 四平 松原 石家庄 苏州 绥化 宿迁 商洛 宿州 汕尾 上饶 朔州 石河子 太原 天津 唐山 泰安 台州 通化 铁岭 台湾 通辽 泰州 铜陵 铜川 天水 武汉 威海 芜湖 梧州 渭南 吴忠 乌海 乌兰察布 潍坊 温州 乌鲁木齐 无锡 武威 文山 西安 厦门 襄樊 信阳 邢台 新乡 孝感 湘潭 宣城 许昌 咸宁 徐州 忻州 新余 兴安盟 咸阳 西宁 益阳 银川 烟台 宜昌 扬州 永州 伊春 宜宾 延边 运城 玉林 盐城 阳江 雅安 阳泉 延安 义乌 云浮 玉溪 岳阳 宜春 营口 榆林 鹰潭 郑州 漳州 株洲 驻马店 张家界 中卫 舟山 肇庆 淄博 湛江 中山 自贡 资阳 镇江 珠海 张家口 周口 枣庄 张掖 遵义 昭通

全国报名电话:0731-85579057

家电维修学校 | 家电维修培训 | 电脑维修培训学校 | 湖南手机维修培训学校 | 电子技术学校 | 电子学校 | 电子维修学校 | 湖南电工焊工培训学校 | 笔记本电脑维修培训 | 显示器维修培训 | 手机维修培训 | 手机维修学校 | 电脑电器维修学校 | 电子技术学校 | 电子维修学校 | 湖南电脑培训学校 | 湖南计算机培训 | 湖南计算机维修学校 | 电脑组装与维护培训 | 网络工程师培训 | 主板维修培训 | 硬盘维修培训 | 电工培训 | 焊工培训 | 液晶电视维修培训 | 彩电维修培训 | 冰箱空调维修培训 | 制冷维修培训

友情连接 - 网站地图 关于收录
      报名电话:0731-85579057    0731-85569651    24小时值班电话:13807313137(杨老师)   咨询QQ: 361928696,  873219118 
校址:湖南省 长沙市 雨花区 车站南路 红花坡路口    网站:
http://www.cswok.com    报名信箱: 879330360@qq.com
 

高级会员:73254人
普通会员:598622人