最近在学习uc/osii在AVR单片机的移植问题,对UC/OS进行了进一步的研读,可是始终有些问题模棱两可,不得要领。从网上也下载了许多UC/OS在AVR上移植的例子程序,始终无法调试成功。因为不用调试和仿真,对内核的运行过程就不能有直观深入的认识。
总算,功夫不负有心人,昨天下载的实例在ICCAVR7上顺利通过了编译,而且在AVRstudio4上也能够顺利的进行调试,在proteus6.9上也能作仿真,通过AVR studio4上的单步运行了断点全速运行,对uc/osII的运行有了深刻的认识。
首先,理清了任务调度的机理。当应用程序建立了3个任务和一个空闲任务,在任务初始化的时候建立所有任务,在OSStart()中通过调用OSStartHighRdy()运行优先级最高的任务。
在任务的运行及调度方面,每个任务的结束部分均设置一个OSTimeDly()函数,通过该函数挂起当前运行的任务,并通过OS_Sched()中的OSCtxSw()进行那个任务级调度,运行优先级最高的任务。
节拍中断时重要的环节,包括中断向量的安装与中断函数的书写。
UC/OS的内核的时间管理可以利用单片机内部的定时器设定固定时间的定时(如20ms),该时间即为一个节拍(Tick),通过OSTickISR定时器中断处理程序进行处理。每个任务均会挂起n个Tick,OSTimeTick()将时所有挂起的任务的延时时间减1,当减到0时,该任务既有挂起状态转为就绪状态。当定时中断时,在OSIntExit()中若发现有更高优先级任务处理就绪状态,将执行中断级任务切换OSIntSw()进行任务的切换。
这只是学习ucosii的开端,Jean J.Labrosse的代码的的精髓还远远没有体会到,学习ucosii的路还很长。
关键字:ucosii AVR单片机 移植小结
引用地址:
uc/osii在AVR单片机上的移植小结
推荐阅读最新更新时间:2024-03-16 14:54
AVR单片机教程——PWM调光
PWM 两位数码管的驱动方式是动态扫描,每一位都只有50%的时间是亮的,我们称这个数值为其占空比。让引脚输出高电平点亮LED,占空比就是100%。 在驱动数码管时,我们迫不得已使占空比为50%,因为不能让两位真正同时地显示不同的数字。但是,我们也可以有意地让LED的占空比不到100%,以降低其亮度。 占空比是可以用程序来调节的。下面的程序允许用户用按键调整蓝色LED的占空比,并通过数码管来显示。 #include ee1/ee.h #define DUTY_MAX 9 int main() { led_init(); button_init(PIN_NULL, PIN_NULL); segment_
[单片机]
应用AVR单片机制作电子打铃仪的思路
AVR具有512个字节的片内EEPROM,利用它可以记录事先设定的打铃时间(如果每个时间条需要2个字节,则存储的时间条可以200多个),然后将AVR制作成电子钟,在某个时间内,扫描并取出片内存储的时间条,与当前时间进行对比,如果吻合,则打铃。 下面是打铃仪(成熟产品)的具体设计思路: 1、硬件方面:用有备用电池供电的日历芯片DS1302作电子钟的标准时间,AVR外置I2C存储器,LED作状态和时间显示,四至五个轻触开关作控制,输出采用无触点方案。供电:12V直流/220V两用,没有市电自动转换12V蓄电池供电。 控制开关的分配:时分调整2个,功能转换1个,存储或显示记录打铃点1个,备用1个。 2、软件方面:从存储
[单片机]
avr单片机Proteus风速计模型仿真 bascom源程序
编译环境:bascom avr+Proteus8.9 单片机源程序如下: rem Main.bas file generated by New Project wizard rem rem Created: 周二 6月 2 2020 TAOTIE rem Processor: ATmega8 rem Compiler: BASCOM-AVR rem Write your code here $regfile = m8def.dat $crystal = 8000000 '$baud = 9600
[单片机]
AVR单片机IO端口操作方法
AVR单片机的IO端口操作是撑握AVR技术的基础,因此需要清晰的理解。下面的例子列出了操作IO端口的方法,资料来源于OURAVR。 举例一:将PB0定义为输出,且输出为高电平 DDRB=BIT(0); //定义 PB0为输出 PORTB|=BIT(0); // PB0 输出高电平 举例二:将PB0、PB1定义为输出,PB0、PB1均为高电平 DDRB|=BIT(0)|BIT(1); //定义 PB0、PB1为输出 PORTB|=BIT(0)|BIT(1);// PB0、PB1 输出高电平 举例三:将PB0数据寄存器的数值翻转,即如果是1时变成0,如果是0时变成1 PORTB^=BIT(0); //翻转PB0口 举例四:将PB0、
[单片机]
AVR单片机片内AD数字模拟转换器程序
/*AVR片内的AD转换器程序,本测试程序是把内部的AD转换器设置为连续转换模式,更多模式相见手册的191-207页*/ #include iom16v.h #define uchar unsigned char #define uint unsigned int #define set_bit(a,b) a|=(1 b) #define clr_bit(a,b) a&=~(1 b) #define get_bit(a,b) a&(1 b) uchar ADC_8bit()//AD转换函数 { ADMUX=0xe0;//*REFS1:0=11H表示参考电压由内部2。56V供电AREF引脚加电容? // ADL
[单片机]
基于AVR单片机和组态王的陶瓷检测系统设计
摘要:针对国内的陶瓷性能检测仪自动化程度不高、检测精度低、检测范围比较窄,可视化差等情况,设计开发了一种基于AVR ATmega128单片机和北京亚控公司的组态软件的陶瓷检测实时控制系统。该系统运用虚拟仪器组态王作为上位机,辅以ATmega128单片机为核心的变参数的模糊神经网络PID控制器,对陶瓷性能进行检测。经现场使用表明,该系统检测精度高、范围广、可视化程度高,使用方便。 0 引言 在城市的建设进程中,越来越注重绿色环保理念,然而使用实心砖会造成资源的巨大浪费,因此空心砖的使用量急剧增长。生产空心砖需要大量的生态陶瓷材料,但相应的陶瓷材料的性能检测工具还很不完善。研制高性能生态陶瓷性能检测仪具有重要的现实意义。本文以陶
[单片机]
AVR单片机外部中断触发的流水灯程序
/* program name : 外部中断程序; 这费了我好几个小时的心血!成功的喜悦难以用言语表达! 概述: 8位流水非精确定时,一秒循环灯闪烁,等待外部中断一下降沿中断触发信号, 外部中断一旦触发,等待触发按键弹起(此时流水灯暂停状态),中断按键一旦弹 起,继续运行上一级程序(流水灯继续运行); accomplish time : 2014-2-7 22:47:15; */ #include avr/io.h #include avr/interrupt.h //中断必备的头文件; typedef unsig
[单片机]
基于ATmega8单片机的125 kHz简易RFID阅读器设计
0 引言 无线射频识别(Radio Frequency Identification,RFID)是利用感应、电磁场或电磁波为传输手段,完成非接触式双向通信、获取相关数据的一种自动识别技术。该技术完成识别工作时无须人工干预,易于实现自动化且不易损坏,可识别高速运动物体并可同时识别多个射频卡,操作快捷方便,已经得到了广泛的应用。 目前存在的一些读卡器,都需要读卡芯片作为基站,成本较高。本文介绍了一种采用分立元件构成的125 kHz RFID阅读器,电路结构简单,成本极低,用于读取EM4100型ID卡。 1 RFID系统的分类 RFID系统的分类方法有很多,在通常应用中都是根据频率来分,根据不同的工作频率,可将其分为以下四
[单片机]