主页(http://www.pttcn.net):基于ARM嵌入式的远程监控系统设计(2)
OSIntCtxSw()在退出中断服务函数 OSIntExit()中调用,实现中断级任务切换.由于是在中断里调用,所以处理器的寄 存器入栈工作已经做完,就不用作这部分工作了。具体完成的任务;调整栈指针(因为调用 函数会使任务栈结构与系统任务切换时堆栈标准结构不一致),保存当前任务 SP,载入就绪 最高优先级任务的 SP,恢复就绪最高优先级任务的环境变量,中断返回。这样就完成了中断 级任务切换。OSTickISR()系统时钟节拍中断服务函数,这是一个周期性中断,为内核提供时钟节拍。频率越高系统负荷越重。其周期的大小决定了内核所能给应用系统提供的最小时 间间隔服务。一般只限于 ms 级(跟 MCU 有关),对于要求更加苛刻的任务需要用户自己建立中 断来解决.该函数具体内容:保存寄存器(如果硬件自动完成就可以省略),调 OSIntEnter(), 调用 OSTimeTick(),调用 OSIntExit(),恢复寄存器,中断返回。 c) OS_CPU_C.C 该文件中共定义了 6 个函数,但是最重要的是 OSTaskStkInit().其他都是对系统内核的扩展时用的.OSTaskStkInit()是在用户建立任务时系统内部自己调用的,对用户任务的堆栈 进行初始化。使建立好的进入就绪态任务的堆栈与系统发生中断并且将环境变量保存完毕时 的栈结构一致。这样就可以用中断返回指令使就绪的任务运行起来。 3.2.2与应用相关的代码 这部分包括两个文件:OS_CFG.H, INCLUDES.H。 用户根据自己的应用系统来定制合适 的内核服务功能。OS_CFG.H 来配置内核,用户根据需要对内核进行定制,留下需要的部 分,去掉不需要的部分,设置系统的基本情况。比如系统可提供的最大任务数量,是否定制 邮箱服务,是否需要系统提供任务挂起功能,是否提供任务优先级动态改变功能等等。 INCLUDES.H 系统头文件,整个实时系统程序所需要的文件,包括了内核和用户的头文件。 3.3用户图形接口 虽然 μC/OS-II 操作系统具有很高的实时性,但不像 WINCE、uCLinux 等操作系统那样 有良好的图形界面支持。所以,在使用液晶和触摸屏的情况下需要移植用户图形接口程序。这里使用的是 μC/GUI。μC/GUI 是一个软件模块集合,通过该模块可以在我们的嵌入式产品 中加入用户图形接口(GUI)。μC/GUI 具有很高的执行效率,并且与处理器和 LCD 控制器相 独立。该模块可以工作在单任务或者多任务环境,可以支持不同大小的显示方式。 通过 μC/GUI 我们可以很方便的在液晶屏绘制图形和界面。如果需要多种字体支持,必 须自己将相应的字体字库加入到 μC/GUI 中。为了避免出现乱码,尽量使用 GB2312 国标字库。 3.4关于字库的兼容性问题 我们国内通常使用的汉字字库是 GB 码,但国际上使用的是 UNICODE 码 ,所以如果数据终端使用的是手机、PDA 等移动通信设备,那么在数据发送前必须进行字码转换,即 GB 码 转换为 UNICODE 码或者 UNICODE 码转换为 GB 码。由于 GB 码与 UNICODE 码在排列组合上没有任何规律,所以通常字码转换的方法就是 查表法。 4结束语 基于 arm9 嵌入式系统的远程监控系统与以往的监控系统不同,高性能的处理器芯片大 大提高了系统的性能。使监控系统能够工作在比较恶劣的环境中。并且在设计上充分考虑到 了系统的可扩展性和兼容性问题,实现了本系统与其他系统的无缝连接。以满足不同工作环 境的需要。
(中国集群通信网 | 责任编辑:陈晓亮) |