微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > uC/OS-II在ARM系统上的移植与实现

uC/OS-II在ARM系统上的移植与实现

时间:03-01 来源:电子工程世界 点击:

2  在ARM系统上的实现

以跑马灯和数码管为例,说明uC/ OS - II 的移植过程:跑马灯是4 个小灯轮流变明变暗,很方便看出效果. 跑马灯在日常中使用很多,比如状态栏跑马灯、文字跑马灯、图片跑马灯、单片机跑马灯等[8 ] . 本文采用的是单片机跑马灯. 实现单片机跑马灯的程序中,只有地址口为低电平(接地) 时,发光管才会亮. 所以只要循环控制地址口的各个引脚的电平高低变化就可使LED 循环点亮:首先是全不亮,接着第1 个灯亮,第2 个灯亮,第3 个灯亮,第4 个灯亮,第5 个灯亮,最后所有的灯一起亮.

笔者使用6 个共阳极LED 数码管来实现在7 段数码管上循环显示0~9 ,A~F 字符. 每个显示位的段选线与一个8 位并行口线对应相连,只要在显示位上的段选线上保持段码电平不变,则该位就能保持相应的显示字符. 这里的8 位并行口可以直接采用并行I/ O 口,也可以采用串入/ 并出的移位寄存器或是其他具有三态功能的锁存器等. 当采用动态显示接口时,在多位LED 显示时,为了简化电路,降低成本,将所有位的段选线并联在一起,由一个8 位I/ O口控制. 而共阴(或共阳) 极公共端分别由相应的I/ O 线控制,实现各位的分时选通. 由于各个数码管是共用同一个段码输出口分时轮流通电的,从而大大简化了硬件线路,降低了成本.

对于数码管的实现分为3 个步骤:

1) 制作LED 字符与码段对应表
2) 扫描控制
3 ( (U8 3 ) 0x02000006) = 0x3E; / 3 使能第一个数码管
3 /
3) 段码输出
( (U8 3 ) 0x02000004) = seg7table[0 ] ;

根据上面的LED 字符与码段对应表,控制相应的数字进行输出. 数码管扫描控制地址为0x02000006 ,8 位访问,比如Bit0 控制数码管0 ,并且低电平有效,Bit5 控制数码管5 ,低电平有效,数码管显示试验系统中采用的是动态显示接口,其中数码管扫描控制地址为0x02000006 ,位0 -5 分别对应一个数码管,将其中每位清0 来选择相应的数码管;地址0x02000004 为数码管的数据寄存器,控制数码管的段码输出.

3  多任务应用程序

uC/OS - II 的移植及跑马灯和数码管的实现如下[9 ] :首先是C 语言入口函数Main (所有C 程序的入口) . 它里面包括调用函数ARMTargetInit () 初始化ARM处理器,调用OSInit ( ) 进行uC/ OS - II 操作系统初始化,然后调用OSTaskCreate ( ) 函数创建任务TaskLED 和TaskSEG,最后调用ARMTargetStart () 函数启动时钟节拍中断,并且调用OSStart ( ) 启动系统任务调度,由于在程序当中使用for ( ; ;) ,这是一个永无止境的回路,所以装置可以一直进行下去,直到关闭装置.

void Main(void)
{ARMTargetInit () ;
uHALr printf (″uC/ OS - II # n″) ;
OSInit () ;
Sem1 = OSSemCreate(0) ;
Sem2 = OSSemCreate(1) ;
OSTaskCreate(TaskLED , (void 3 ) &IdLED , (OS STK 3 )
&StackLED[ STACKSIZE - 1 ] , 5) ;
OSTaskCreate(TaskSEG, (void 3 ) &IdSEG, (OS STK 3 )
&StackSEG[ STACKSIZE - 1 ] , 6) ;
ARMTargetStart () ;OSStart () ;
return ;}

4  结语

使用创建好的模板Temp 新建一个工程Temp ,并将模板中的Core 和Assemble 文件夹中的文件加入到工程Temp 中. 1) 新建一个文件Temp. c ,并将其添加到Temp 工程的App 文件夹中. 2) 打开Temp. c文件,添加两个任务,它们的任务处理函数分别为TaskLED() 和TaskSEG() . 3) 在TaskLED( ) 函数中每隔50 个时钟节拍使所有跑马灯闪烁一次(即按顺序亮,然后全亮,最后全灭,顺序循环) . 4) 在TaskSEG() 函数中每隔50 个时钟节拍切换一次数码管显示(循环从0~F 显示) . 5) 编译工程Temp ,如果出错,则进行修改后再编译. 6) 将Temp 下载并运行,看结果. 正确的结果是将每隔1/ 2 s 切换一次数码管显示,每隔1/ 2 s使所有跑马灯闪烁一次. 经持续了2 h试验,没有出现错误,跑马灯和数码管正常运转,结果证明移植成功.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top