完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
可以提高系统软件开发的效率。将μC/OS-II移植到SPCE061A上,在μC/OS-II的平台上设计软件对于提高相关嵌入式应用系统产品的质量,减少开发周期和降低成本方面有着重要的意义。
基于SPCE061A的硬件最小系统的设计 SPCE061A的系统结构 SPCE061A具有丰富的片上系统资源,结构如图1所示,其片内包括: ·16位的高性能u課sp内核单片机 ·CPU时钟范围:0.32MHz~ 49MHz ·片内32k字的Flash程序存储器、2k字的SRAM数据存储器 ·2个16位I/O端口 ·14个中断源 ·1通道专用音频A/D转换通道 ·7通道A/D转换通道 ·内置MIC放大电路和自动增益(AGC)放大电路 ·2路电流输出型的D/A转换通道 ·2个16位通用定时器/计数器 ·实时实钟(RTC) ·低电压复位、低电压监测 ·内置在线仿真接口(ICE) ·具有保密功能 ·具有WatchDog功能 基于SPCE061A的最小应用系统的构建 基于SPCE061A丰富的片内资源,在它的OSCO、OSCI端接上32768 Hz晶体振荡器及谐振电容,在锁相环压控振荡器的阻容输入VCP端接上相应的电容、电阻后,再加上复位电路即可构成一个最小系统。如图2所示。外围电路接口可扩展LCD液晶显示器用于对有关数据的实时显示。 μC/OS-II 在SPCE061A上的移植 μC/OS-II内核移植的主要内容 μC/OS-II是为微控制器和应用软件开发而设计的抢占式实时多任务操作系统,其内核主要实现任务调度、任务间的通信、内存管理和时间管理。其软件体系结构以及与硬件的关系如图3所示. |
|
|
|
多任务应用程序位于最上层,通过调用内核的API函数来实现任务的调度和切换、存储管理和任务进程的通讯. μC/OS-II的大部分代码是用C语言编写,而与硬件相关的三个源程序文件0S_CPU.H,OS_CPU_A.A,OS_CPU_C.C含有与硬件处理器相关的汇编语言代码,来实现对处理器寄存器的访问以及堆栈的操作.因而μC/OS-II操作系统在SPCE061A上的移植主要是对0S_CPU. H,OS_CPU_A.A,OS_CPU_C.C三个源程序的编写。
其中OS_CPU.H 中包括了用#define定义的与处理器相关的常量,宏和类型定义.这样与μC/OS-II所定义的变量类型相一致.OS_CPU_A.A 中要求用户编写四个简单的汇编函数:(1)OSStartHighRdy()函数的作用是用于运行最高优先级的就绪任务.(2)OSCtxSw()是实现 CPU 在正常运行时任务间的切换,即对当前任务堆栈的保存和对高优先级任务堆栈的弹出,使最高优先级任务获取CPU 的控制权. (3)OSIntCtxSw()是在中断服务程序中执行任务切换功能的函数.(4)OSTickISR()是系统时钟的中断服务程序.该程序执行频率为10~100 Hz,主要功能是检查是否有由于延时而被挂起的任务成为就绪任务,如果有就调用OSIntCtxSw()进行任务切换,从而运行高优先级的任务. OS_CPU_C.C中主要是编写任务堆栈初始化函数OSTaskStklnit(). 移植中的关键问题 多任务系统在运行时,任一当前正在运行的任务好像独占CPU一样,需要为每个任务开辟一段内存空间作为该任务的任务堆栈,该堆栈的作用是保存任务被切换前时CPU各寄存器的值以及系统堆栈的数据。由于不同的处理器其内部的寄存器分配不一样,有时堆栈的增长方式也不一样,因而移植的关键问题就是要针对不同的处理器如何在任务切换时做好寄存器的状态的保护,以及系统堆栈和任务堆栈的切换,从而编写好介于底层硬件和操作系统之间的软件层。凌阳 SPCE061A单片机有R1~R5五个通用寄存器,以及段寄存器SR, 程序计数器PC,共有7个CPU内部寄存器在任务切换前需要保存。μC/OS-II系统通过调用OSCtxSw()来实现任务的切换。 语音识别系统实例 本系统通过设计一个语音识别系统来验证μC/OS-II在SPCE061A上的移植成功,系统共创建4个实时任务,硬件实现上只需在最小系统上增加相应的音频电路和液晶显示模块。 //建语音识别初始化任务 OSTaskCreate(Task1, (void * )0, (void*) tackl[-TASK—STK—SIZE一1],1); //建立语音训练任务 OSTaskCreate(Task2, (void * )0, (void*) tack2[-TASK—STK—SIZE一1],2); //建立语音识别任务 OSTaskCreate(Task3, (void * )0, (void*) tack3[-TASK—STK—SIZE一1],3); //LCD显示的任务 OSTaskCreate(Task4, (void * )1, (void*) tack4[-TASK—STK—SIZE一1],4); 同时采用信号量来实现语音识别任务和LCD显示的任务之间的通讯,使得系统在成功识别语音后同时控制LCD输出识别的正确与否的信息。系统运行结果:系统初始化,调用训练函数进行语音识别训练;训练成功后,进入语音识别循环,并将语音识别的结果在LCD上显示出来。 μC/OS-II操作系统具有较强的实时性,而且代码量较小(总计8K 多),现已被移植到许多处理器上。而将μC/OS-II移植到SPCE061A芯片上,具有一定的应用价值,使得基于SPCE061A的应用系统的设计可以更加灵活。同时μC/OS-II 实时操作系统的在SPCE061A移植,不但可以提高基于SPCE061A的应用系统的实时性、可靠性和稳定性,还提高了应用软件的可移植性,降低了研发周期。 |
|
|
|
只有小组成员才能发言,加入小组>>
800 浏览 0 评论
1156 浏览 1 评论
2531 浏览 5 评论
2863 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2714 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1093浏览 3评论
197浏览 2评论
463浏览 2评论
376浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
458浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 13:42 , Processed in 1.227849 second(s), Total 81, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号