导言
运用实时多使命操作体系(RTOS)作为嵌入式规划的根底和开发渠道将成为嵌入式运用规划的干流。μC/OS-II是一种源码揭露、可移植性、可固化、可裁剪、占先式的实时多使命操作体系,现在现已得到广泛的运用。
在为电力体系接地选线设备开发的数据收集监测体系的规划中,笔者规划了集散式的数据收集结构,灵敏的组态习惯了现在国内大都中低压输配电网的数据收集需求。在此硬件渠道上,笔者将实时操作体系 μC/OS-II移植到TMS320LF2407A类型的DSP上,完成了多使命的并行履行,体系的牢靠性和实时性得到大幅提高;规划了CAN总线驱动程序,使得下位收集处理模块与上位的主操控器具有了牢靠快速的通讯功用和协调功用。
1.集散式的数据收集体系规划
体系的全体结构如图1所示:
图1集散式选线体系全体结构
图中反映出现在变电站常见的网络结构。一般的依据会集式数据收集方法在运用上存在必定的缺陷,比方针对不同变电站实际情况装备不行灵敏等。而依据集散式的数据收集体系却具有体系习惯才能强,组态便利,牢靠性高级长处。因而,依据变电站网络的这种结构,本设备规划选用集散式数据收集的方法,即在每条支路上均挂接一个独立的智能数据收集及处理模块担任实时收集和数据预处理;主操控器与各智能收集处理模块经过CAN现场总线进行通讯,然后不只完成主控的功用,还具有灵敏的集散扩大功用。
2.CAN总线接口的规划
在各种现场总线网络中,最早为轿车电子设备互连而开发的CAN总线由于其简略灵敏的装备以及强壮的实时操控和检错纠错才能而在许多自动化领域中得到了广泛的运用。
美国TI公司DSP产品线中的2000系列是专为工业操控运用规划的数字信号处理器,具有强壮的数字信号处理才能,还集成了丰厚的外设和I/O,成为现代电机操控、电力体系自动化等运用中很好挑选。在这款DSP处理器上,自带了兼容CAN2.0B规范的CAN总线操控器,因而只需外接一片CAN总线收发芯片即可使模块具有完好的CAN总线通讯才能,在此运用支撑1Mbps的PCA82C250收发器芯片,接口规划见图2。
图2收集模块CAN总线接口
3.μC/OS-II在2407上的移植
绝大部分μC/OS-II的源码是用移植性很强的ANS%&&&&&%写的,只要和微处理器硬件相关的那部分是用汇编语言写的。而TI公司供给的编译器CodeComposerStudio(C2000)V2.20支撑C语言和汇编语言开发,笔者在此编译器的根底上完成了μC/OS-II的移植。移植作业首要会集在三个文件的修正作业:修正头文件OS_CPU.H相关的内容,包括:数据类型界说、仓库增加方向、中止相关的一些宏界说等;OS_CPU_C.C中编写使命仓库初始化函数及体系HOOK函;OS_CPU_A.ASM中编写四个汇编语言函数:OSStartHighRdy(),OSCtxSw(),OSIntCtxSw()和OsTickISR()。
详细移植进程由于不是本文要点,恕笔者不再胪陈。
4.依据缓冲行列支撑下的CAN总线驱动程序规划
驱动程序是衔接底层的硬件和上层的API函数的枢纽,有了驱动程序模块,就能够把操作体系的API函数和底层的硬件分开来。任何一个硬件的改动、删去或许增加,只需求随之改动、删去或许增加供给给操作体系的相应的驱动程序就能够了,并不会影响到API函数的功用,更不会影响到用户的运用程序。一起,为了确保在实时多使命操作体系中,对硬件拜访的唯一性,体系的驱动程序要受控于相应的操作体系的多使命之间的同步机制。
(1)μC/OS-II的通讯机制
μC/OS-II在处理使命之间的通讯和同步的时分,首要经过以下几种方法:信号量(Semaphore),邮箱(Mailbox),音讯行列 (Queue)和互斥信号量(Mutex)。详细的经过事情操控块(ECB)来完成。μC/OS-II中界说的数据结构OS_EVENT能够保护使命间通讯和同步的一切信息,该数据结构不只包括了事情自身的界说,如信号量的计数器、指向邮箱的指针、指向音讯行列的指针数组、互斥量中能否取得资源的Flag 和正在运用该互斥量的使命,还界说了等候该事情的一切使命列表。事情发生后,等候的优先级最高的使命进入安排妥当态。
(2)缓冲行列的规划和通讯使命的合作
在微机体系中,一般串行设备或许其他字符型设备都存在外设处理速度和CPU速度不匹配的问题,所以需求树立相应的缓冲区。向CAN口发送数据时,只要把数据写到缓冲区,然后由CAN操控器逐一取出往外发送。从CAN口接纳数据时,往往等收到若干个字节后才需求CPU进行处理,所以这些预收的数据能够先存在缓冲区。缓冲区能够设置收到若干个字节后再中止CPU,这样就避免了由于CPU的频频中止而下降体系的实时性。
在对缓冲区读写的进程中,经常会遇到想发送数据的时分,缓冲区已满;想去读的时分,承受缓冲却是空的。关于用户程序端,选用传统的查询作业方法,频频的读取使得程序功率大为下降。假如引进读、写两个信号量分别对缓冲区两头的操作进行同步,问题天然处理:用户使命想写但缓冲区满时,在信号量上休眠,让CPU运转其他使命,待ISR从缓冲区读走数据后唤醒这个休眠的使命;相似的,用户使命想读但缓冲区空时,也能够在信号量上休眠,待外部设备有数据来了再唤醒。其间,μC/OS-II的信号量供给了超时等候机制,CAN端口自身也有超时读写才能。
承受和发送的数据缓冲区数据结构界说如下:
typedefstruct{
INT16UBufRxCtr;//承受缓冲中的字符的数目
OS_EVENTBufRxSem;//承受信号量
INT8UBufRxInPtr;//接纳缓冲中下一个字符的写入方位
INT8UBufRxOutPtr;//接纳缓冲中下一个待读出字符的方位
INT8UBufRx[CAN_BUF_SIZE];//接纳环形缓冲区的巨细
INT16UBufTxCtr;//发送缓冲中字符的数目
OS_EVENTBufTxSem;//发送信号量
INT8UBufTxInPtr;//发送缓冲中下一个字符的写入方位