曾春,蔡阳,孙周,胡杰
摘要:stm32是目前应用最广泛的单片机之一,具有低功耗、高性能等优点。移植了UCOSII之后的单片机,相比于“裸机”,具有操作灵活,实时性良好的优点。本文针对传统软件定时器维护方式,提出了一种基于运行态数组的软件定时器改进方案,和空闲定时器控制块链表指针相比,支持随机访问定时器数据;和定时器控制块数组相比,运行期绑定成员变量,更加灵活;和定时器轮相比,更加直观、方便操作和理解。缺点是内存浪费,对于固定的系统来说,当一个操作系统烧进下位机,不会产生复杂而且庞大的数据,这可能不会产生较大的影响。
关键词:UCOSII;软件定时器;stm32;物联网;运行态;嵌入式
中图分类号:TP316 文献标识码:A
文章编号:1009-3044(2021)20-0014-06
Improvement Scheme of High-precision UCOSII Software Timer Based on Pointer Array
ZE|NG Chun, CAI Yang, SUN Zhou, HU Jie
(School of Computer Science, University of Yangtse, Jingzhou 434000, China)
Abstract: STM32 is one of the most widely used single chip microcontrollers at present. It has the advantages of low power consumption and high performance. After transplanting UCOSII MCU, compared with "bare machine", it has flexible operation and good real-time performance. Aiming at the traditional maintenance mode of software timer, this paper proposes an improved scheme of software timer based on running state array, which supports random access to timer data compared with free timer control block list pointer, and binds member variables more flexibly in running time than timer control block array. It is more intuitive and convenient to operate and understand compared with timer wheel. The disadvantage is memory waste. For a fixed system, when an operating system burns into the lower computer, it will not produce complex and huge data, This may not have a major impact.
Key words: UCOSII; software timers; stm32; iot; operating state ;embedded system
UCOSII由美国Jean J. Labrosse设计而成,具有开源、实时性、稳定性、对处理器要求不高等特点[1],一个操作系统的实时性是指该系统的时钟信号能够准确的定时,同时各处的时钟能够在不同的场合比如ns、us级达到一致。数据的实时性在如今的科技时代起了非常重要的作用,移植了UCOSII后的STM32F107ZET6具有了强大的浮点运算能力,能够精确处理各项从具有状态变化的设备传递过来数据,而且UCOSII中的软件定时器能够精准地控制各项任务的时间,具有良好的数据实时性。但是传统的实时操作系统虽然力求内存占用量小,却忽视了灵活操作各项实时数据的功能,因此,本文采用了基于指针数组的数据结构,改进了传统对于软件定时器的维护方式,内存影响可以忽略不计,指针数组意为存放指针的数组,每个数组元素中存放的是指针。
UCOSII为一个开源系统,在任务同步与通信上提供了信号量、消息队列和消息邮箱功能[2],另外还能进行时间处理、CPU移植等功能。正是由于其开源并且功能多使得这方面的研究非常广泛。改变定时器的维护方式,也就是改变其存在于操作系统的数据结构,可以更加多样化实现对智能设备的数据实时操作,比如有时我们希望通过不断修改定时器的值来实现对于步进电机的计算机数控,以便得到理想的结果,有的系统采用外部计数脉冲方式,实时监测车针在各个相位的运动位置[3],这就需要用到高精度的实时操作系统来实现相应功能。
1 软件定时器基础知识
单片机内部都拥有能够通过对时钟脉冲的计数实现定时的硬件定时器,但数量有限,于是便有了软件定时器,它基于硬件定时器的定时中断利用软件方法来实现,定时更长,使用更灵活[4]。51单片机特便是航天器中的C51软件定时器会出现甚至同时出现以下问题:中断冲突下定时器操作错误,非中断冲突下定时器操作错误和定时器時间码读取错误[5]。而移植了操作系统后的stm32单片机功能就比51单片机强大了很多。UCOSII从V2.8.3版本(包括UCOSIII)以后加入了软件定时器,这使得UCOSII的功能更加完善。而且相比于硬件定时器,软件定时器的开销更小,成本更低,不用担心硬件损耗的问题,遇到问题,直接可以在软件层面解决。可以这么理解,软件定时器就是一个硬件定时器的驱动,这个驱动是可以根据任务需要进行一些更改的,嵌入式的核心就在于对中间件等驱动程序的编写,并不在于创造全新的一种固定的算法,而是依赖于已经存在的硬件,根据具体情景灵活开发。