*stk++ = (INT16U) (ptos+MaxStkSize) & 0xFF;
/*?C_XBP 仿真堆栈指针低8位*/
return ((void *)ptos);
}
void OSTaskCreateHook (OS_TCB *ptcb) reentrant;
void OSTaskDelHook (OS_TCB *ptcb) reentrant;
void OSTaskSwHook (void) reentrant;
void OSTaskStatHook (void) reentrant;
void OSTimeTickHook (void) reentrant;
3). 用汇编语言编写OS_CPU_A.ASM中4个与处理器相关的函数
OSStartHighRdy ( ):运行优先级最高的就绪任务
OSCtxSw ( ) :任务级的任务切换函数
OSIntCtxSw ( ):中断级的任务切换函数
OSTickISR ( ):中断服务函数
以上四个函数的具体内容见附录。
完成上述3个文件的编写之后,μC/OS-II就可以在系统的硬件平台上正常运行了。
4.3 系统的软件设计与实现
4.3.1 设计总述
系统软件是以RTOS为平台的,RTOS作为一种专门为嵌入式微处理器设计的模块化、高性能的实时操作系统,提供了一种基于开放系统标准的完善的多任务环境。它作为嵌入式应用软件的基础和开发平台,是一段嵌入在目标代码中的软件,在嵌入式系统启动后首先执行的背景程序,用户的应用程序是运行于其上的各个任务,RTOS根据各个任务的要求进行资源管理、消息管理、任务调度、异常处理等工作。
图4-7 软件体系结构
系统软件的体系结构如图4-7所示。硬件抽象层(HAL)把实时内核与硬件隔离开,实现了操作系统内核与设备无关,提高了应用系统的可靠性。内核层是一个是实时多任务操作系统(RTOS)内核。内核层上面是高层驱动和库函数,提供通用的API、I/O管理器。应用程序层是用户的不同的任务。
4.3.2 任务的划分
系统中每个任务均有以下三部分组成:应用程序、任务堆栈以及任务控制块。其中只有应用程序被烧入ROM,而任务本身则被置于RAM,待系统运行时再予建立。任务堆栈用以存储CPU的寄存器内容。当某任务由运行态变为其它状态时,CPU寄存器内容压入相应任务堆栈,反之则将相应任务堆栈内容置入CPU寄存器。作为系统中定义的一个数据结构,任务控制块的内容包括任务堆栈的地址、任务当前状态、任务优先权等。操作系统通过查询任务控制块内容实现对任务的管理。
在进行任务划分设计时,要考虑以下问题:
1).任务间的关系:这包括两个方面,一方面是任务间的同步和通信,这可通过信号量、邮箱等通信方法实现。另一方面,资源共享,通过信号量或其它方法实现。我在系统设计中使用了信号量和中断的开启,实现上述功能。
2). 定时或者延时:一个任务可能需要每隔一段时间执行一次操作。如温度采样计算任务,在设计中每秒分别对各路温度采样一次,然后进行计算。这种定时操作可以而且必须使用操作系统的定时系统来实现。
3). 等待操作:在任务程序设计中,应尽量避免使用程序询问方法,而用中断方式来实现等待操作,除非程序执行时间小于任务调度时间。另外为防止发生意外情况使等待事件不发生而引起任务无限等待的情况,都加了等待超时处理功能。
根据要实现的功能,我将系统划分为如下6个任务:按键处理、LCD显示、串行通信、输出任务、控制运算、信号采集处理。从系统设计方面,可以划分为人机交互模块、串行通信模块、温度测量及控制模块和远程加载模块。系统软件结构图如图4-8所示。
图4-8 系统软件架构
μC/OS-II的任务调度是按优先级进行的, 根据各任务的实时性要求及重要程度,分别置它们的优先级为4、5、6、7、8、9。其中0、1、2、3、OS_LOWEST_PRIO-3、OS_LOWEST_PRIO-2、OS_LOWEST_PRIO-1、OS_LOWEST_PRIO 这几个优先级保留以被系统使用。优先级序号越低,任务的优先级越高。任务间的通信和同步是利用信号量和开关中断来实现的。
下面对各任务作简要的介绍。
按键处理任务
此任务主要完成键盘扫描工作。用户可以通过键盘对系统进行控制,如改变运行状态、修改相关的参数等,系统必须做出及时的处理,因此在系统中把它的优先级设为最高,一旦有键被按下,系统就能够作出响应完成相应的功能。
2.LCD显示任务
此任务用于刷新LCD显示的工作。系统的运行状态、各路的温度值、PID相关参数大小、各继电器的状态、错误指示及其它各种信息需要及时的通知用户,当有关的信息发生改变时,需要调用此任务更新显示。
3.串行通信任务
在设计中,通信任务一方面接收PC发来读写命令帧,对其进行分析处理后,做出相应的响应,从而实现PC机对其进行控制;另一方面也要把相关信息按要求组成相应的帧,发送给PC机。
4.输出任务
此任务完成对各路继电器进行控制,从而实现温度调节。根据控制运算任务决策结果,负责各继电器占空比的调节。
5.控制运算
此任务是最重要的一环,当任一路温度转换结束后,都会发信号给控制运算处理任务进行处理,控制运算处理任务接到信号后,对信号分析之后,对要处理的测量结果进行转换查表等处理,算出实际温度值,一方面调用基于时间最优的PID控制算法加以决策处理,发信号给输出任务加以控制,另一方面也发信号给LCD显示任务更新显示。
6.信号的采集处理
此任务采用定时方式对各路温度信号进行采集,负责通道的选择,对LTC2430转换结果进行读取,根据设定,取转换结果的前16位,用一个无符号整数进行保存,然
首页 上一页 10 11 12 13 14 15 16 下一页 尾页 13/20/20
嵌入式系统在多点温度控制中的应用(十三)由毕业论文网(www.huoyuandh.com)会员上传。