分析M16C62在uC/OS-II嵌入式系统中的应用
图1 响应中断后的堆栈状态
中断堆栈中依次保存程序计数器PC和标志寄存器FLG中的内容,因此,在OSTaskStkInit()函数中就是要模拟这样的一个压栈过程。先压入FLAG的高四位和PC指针的高四位,接着压入FLAG低位、PC中间八位和PC的低八位。在保存完PC和FLAG位后就应该为CPU的寄存器FB、SB、A1、A0、R3、R2、R1和R0分配相应存储空间。OSTaskInit()函数返回的是任务堆栈的指针。
2、多任务系统设计
多任务系统的设计是以M16C62单片机为CPU,以uC/OS-II为操作系统构成一个实时多任务系统,系统包括一个基于SPI总线的温度传感器(DS1722)、一个基于I2C总线的实时钟(X1226)、一个LCD(JM202A)和键盘。M16C62工作在微处理器模式,片外扩展一个32K×16位的RAM(Cy7c1021b)和由两片EEPROM(EEP29010-90)构成的存储器。多任务系统的设计主要包括:单片机资源分配和多任务设计两个方面。
(1)、M16C62单片机资源分配
M16C62单片机是一个16位单片机,线性寻址空间是1M,但片内的RAM大小只有3Kbyte,因此要使多任务系统能正常稳定地工作必须合理分配资源。uC/OS-II中所有内核代码必须在RAM区而把系统堆栈区划块到3K RAM 区外。通过对Ncrt0.a30和Sect30.inc这两个M16C62配置文件,可以完成对单片机的资源划分。NC30编译器一开始就会编译Ncrt0.a30和Sect30.inc这两个文件,完成对CPU的初始化,和资源分配,主要包括:存储器空间、RAM区分配、中断向量分配、堆栈区划分等。
(2)、多任务设计
该系统中除了uC/OS-II的空闲任务外,还包括实时钟任务、温度采集任务和键盘中断任务和数据存储任务。实时钟主要是能精确记录系统的日期,任务优先级为10,该任务处于一直工作状态;温度采集任务的优先级为20,主要是完成温度数据的采集;数据存储任务是在温度发生较大变化的时候记录当时的时间和温度,任务优先级为30,在一般情况下这个任务是处在挂起状态,一旦温度变动超过预置范围,温度采集任务就会发出一个有效信号量使处于挂起态的数据存储任务转为就绪态。键盘中断任务是通过M16C62的键盘中断来完成参数的设定,该任务以一个中断处理函数的形式来完成的。系统的程序流程图如图2所示。
图2 系统主程序流图
3、结束语
把uC/OS-II移植到M16C62单片机中,并以M16C62单片机为微处理器构成一个实时多任务系统,不仅系统设计简洁、硬件结构相对与51系列单片机来说也要简单,而且具有较强的抗干扰能力和系统稳定性。以M16C62为微处理器,以uC/OS-II为实时操作系统构成的多任务系统能广泛应用在小型实时多任务系统中,具有较好的应用前景。
平面变压器厂家 | 平面电感厂家程序框图中的 队列引用句柄 怎么创建?求教:下图中的“队列引用句柄”是怎么创建的呢? 前面板可以创建,关键这是后面板,我找了好久没找出来; 这是NI官方应用技术帖“基于生产者和消费者、队列的状态机”中的
ADSL集成电路关键参数的测试策略目前全球ADSL用户数量在迅速增长,为了刺激ADSL的持续增长,市场需要低成本的ADSL集成电路,本文介绍如何利用先进的测试平台来对ADSL芯片的某些关键参数进行测试,从而使半导体制造商能够降低ADS
[变压器]气隙和电感量问题请教一个问题:反激开关电源设计,变压器原边电感一般是根据伏秒积公式来计算(《Switching_Power_Supplies_A_to_Z》):Lp*△I/Ton = Vin,而且Lp=N*N*AL(无气隙)到最后变压器一般要加气隙,加了气隙之后,磁芯的AL值会下降很多,对于固定的匝数,电感量Lp岂不是又变了?谁能解释下,有点晕。 谢谢!满意回复+10yytda 查看完整内容是的,磁导率,AL值,这些都