1、ARM7内核;C/ OS-一、介绍所谓的操作系统移植是一个实时操作系统内核可以在运行在其他微处理器上。移植部分对于不同的CPU具有对应的不同的代码。大多数C / OS-代码是用C编程语言编写的,这对于移植C / OS -是非常方便的。但根据不同的微处理器,用户仍然需要使用汇编语言编写一些有关不同微处理器的硬件的程序。这是因为当C / OS-读或写寄存器时,它只依赖于汇编语言。 因为C / OS -操作系统的要求,有三个文件需要当C / OS-移植到一个特定的微处理器。整个移植工作主要围绕创建这三个文件。这些文件显示如下: 1、在C语言中的头文件OS_CPU中,一些与编译器无关的数据类型需要定义
2、OS_CPU中。这些数据类型包括使用的堆栈数据类型和堆栈的增长方向。一些与ARM7内核相关的软件中断也被定义在该文件中。 2、另一个OS_CPU_C.C是一个 C源文件程序。该文件主要包括C / OS-的任务堆栈的初始化函数和一些被C / OS-操作系统调用的用户函数。 3、最后一个OS_CPU_A.S文件是一个汇编程序源文件。这是一个时钟中断服务函数在运行的时候,也包含了一个用于引起中断的任务切换函数,并且也具有总是运行最高优先级的任务当C / OS-系统首次进入多任务环境时。二、创建OS_CPU.H文件A、定义与编译器有关的数据类型因为不同的微处理器有不同的字长度,所以C / OS-的移植
3、包含一系列的数据类型的定义,这使移植能够实现。尤其是在C语言中使用的数据类型,例如短型、整型、长型等等,这些数据类型不能直接用于C / OS-。因为这些数据类型与编译器类型有关,它们不能被移植。所以这些数据类型都定义为整型数据结构,在许多情况下,他们是可移植的。B、系统软中断函数的定义中断是一种硬件机制,但在C / OS -操作系统,一些重要的任务函数的实现应该取决于中断级的代码。所以,这种情况下,C / OS-操作系统需要一条预处理器指令来模拟中断。它类似于一个硬件中断,所以它被称为软中断。大多数微处理器的内核可以提供这种类型的软中断指令。在ARM7内核,它是“SWI”。为了使底层接口函数是
4、独立的处理器状态并且底层任务函数不需要知道调用函数的准确的地址当任务被调用时。SWI指令应该用作底层接口。并且不同的函数能够通过不同的软件中断函数编号的方法进行区分。ADS1.2编译器总是使用“_swi”来声明一个不存在的函数。而一旦不存在的函数被调用时,一条SWI的指令应该插入调用函数并指定函数编号的位置。这里显示一些在C / OS-中重要功能的软中断函数_swi(0x00) void OS_TASK_SW(void);/在任务间切换功能_swi(0x01) void _OSStartHighRdy(void);/首先运行最高优先级任务_swi(0x02) void OS_ENTER_CRI
5、TICAL(void);/关中断_swi(0x03) void OS_EXIT_CRITICAL(void);/开中断_swi(0x80) void ChangeToSYSMode(void);/切换到系统模式这些函数的具体代码在文件OS_CPU_C.C和OS_CPU_A.S中。根据C / OS-的要求,所有在应用系统中的C文件必须包括文件INCLUDES.H。所以正常的做法是使INCLUDES.H文件包含OS_CPU.H文件。三、创建OS_CPU_C.C文件在OS_CPU_C.C文件中,C / OS-操作系统的移植规范要求创建十个简单的函数OSTaskStkInit(),OSTaskCrea
6、teHook(), OSTaskSwHook(), OSTaskDelHook(), OSTaskIdleHook(),OSTimeTickHook(), OSTaskStatHook(),OSInitHookBegin(), OSInitHookEnd(),OSTCBInitHook()。除了OSTaskStkInit()函数外并非所有的函数都必须创建。在符合C / OS -操作系统的规范要求下, 如果用户不想使用这些函数,停用另外9个函数的功能并可以设置为空函数。A. 编写OSTaskStklnit()函数在C / OS -操作系统,这两个函数OSTaskCreate()和OSTaskCr
7、eateExt()通过调用OSTaskStkInit()函数的方法初始化任务的堆栈结构,并保存所有寄存器数据到各自的堆栈中。当调用函数实现初始化后,它清除有关符合ARM7内核微处理器的实际堆栈方向寄存器(堆栈方向是降序排列),并且最后返回堆栈顶的指针值。图1 堆栈结构初始化(参数pdata被传递给堆栈)图1展示了OSTaskStkInit ( )函数初始化堆栈的过程当C/OS-操作系统创建任务的时候。在初始化后,OSTaskStkInit ( )最后返回了堆栈顶的指针。B、系统软件中断函数在文件OS_CPU_C.C中,用C语言写的软中断函数总是第一个被介绍。该文件包含所有的软件中断函数除了函数
8、编号为0的任务(OS_TASK_SW()和函数编号为1的OSStartHighRdy()。在文件OS_CPU_A.S中,函数编号为0和为1的是用汇编语言编写的。这是因为C语言不能确切提供这两个函数要求的堆栈结构。另一个原因,如果用于切换任务的函数用汇编语言编写的话,能很方便的实现跳转。由C语言编写的软中断函数的性质的介绍如下:由于使用了软中断,在更改了ARM7内核SPSR寄存器的相应控制位值后,当软中断结束后,通过将SPSR寄存器的值复制到GPSR寄存器中特定的方式,更改微控制器的运行模式的目的能够实现。四、创建OS_CPU_A.S文件根据C / OS-操作系统的移植规范,有四个函数OSCtx
9、Sw(),OSIntCtxSw(),OSTickISR(),OSStartHighRdy(),需要编写,而且必须用汇编语言编写。在这个文件中,用于提取编号0和编号1的软中断函数编号的函数也应该用汇编语言编写。A.提取软中断的函数编号图2 提取软中断号系统根据不同的软中断函数编号总是执行不同的函数。在ARM7内核微处理器家族,LR寄存器总是用于存储子程序或异常的返回地址。LR寄存器可以获得SWI指令代码。并且软件中断的编号包含在SWI指令中。所以软中断对应的函数编号可以通过读取指令代码的对应位段来得到。考虑到ARM7内核的三级流水线架构和程序的运行状态可能是ARM态或Thumb状态,所以他们必须
10、对应不同的处理方式。图2显示了具体的流程图。B、编写OSStartHighRdy(),OSCtxSw()和OSIntCtxSw()函数C / OS-操作系统的调度函数OSSched()是通过调用实现任务切换功能OS_TASK_SW()函数和OS_TASK_SW()函数完成整个任务切换,OS_TASK_SW()函数和OS_TASK_SW()函数是通过调用函数OSCtxSw()函数实现的。OSCtxSw()函数调用了OS_TASK_SW()用于最后切换任务。OSIntCtxSw()函数的大多数源代码几乎与OSCtxSw()函数相同。它们具体的区别是OS_TASK_SW()函数需要存储CPU寄存器值
11、。根据C / OS-操作系统的要求,中断服务程序(ISR)已经存储了CPU寄存器值。所以,OSIntExit()函数将不会处理在最后的中断处理后(如果中断嵌套的存在)。这个时候,任务切换不需要再次存储CPU寄存器的值。在C / OS-操作系统的移植过程中,为了使系统的代码高度可靠的, OSIntCtxSw()函数可以通过调用OSCtxSw()函数的方式实现。具体的实现方法是再次保存CPU寄存器的值,但它对整个系统没有任何影响。因为CPU寄存器必须在OSCtxSw()函数写操作的时候执行,所以OSCtxSw()函数应该用汇编语言编写。图3显示该函数的流程图。该函数与C / OS -操作系统的要求
12、相比有一些差异移植,但这并不影响系统的执行。在某种程度上,这证明了C / OS-是一个非常优秀的嵌入式操作系统,它可以根据系统的需要进行裁剪。最后图3的流程图执行了LDMFD SP !,R0 - R12,LR、PC ARM指令。因为在C / OS-操作系统中,任务在异常模式中执行,它只可以在用户或系统模式中执行。C / OS-操作系统通过调用OSStart()函数,OSStart()最终调用OSStartHighRdy()函数的方式开始任务环境。OSStartHighRdy()函数的编写应遵循C / OS-操作系统的移植规范。具体的方法是通OSCtxSw()函数一样。它们两者间唯一的区别是当第
13、一次执行任务调度的时候OSStartHighRdy()函数不必存储寄存器的值。 图3. OSCtxsw()函数流程图创建了几个移植文件后,理论上,C / OS -操作系统可以正常的在ARM7内核微处理器上执行了。但是在C / OS-操作系统第一次执行前,需要提供OSTickISR()系统时钟函数。这是系统时间的函数一定是写。C / OS-操作系统需要用户提供周期的时钟,并且时钟可以实现延迟函数和超出时间函数。通常,周期时钟是由中断函数OSTickISR()实现。事实上,调用OSTimeTick()函数的实质是通过调用OSTickISR()函数实现的。因此,中断任务OSTickISR()必须通过
14、ARM7内核微处理器的硬件定时器实现,并且中断级应该设置为最高。图4. C/OS-操作系统中断服务程序流程图 (系统定时中断举例。)在C / OS -操作系统的移植上,中断服务子程序必须用汇编语言编写。图4显示了关于ARM7内核中断服务程序的流程图的写作规范。图4显示系统定时器中断的实现OSTimeISR()函数通过从执行用户程序转换到C / OS-()操作系统OSTimeTick()执行的方式实现。同样重要的是,如图4所示,已经实现了中断和退出中断处理,系统应再次选择任务列表中最高优先级的任务,然后系统切换到最高的任务。保存在OS_CPU_A.S函数OSIntCtxSw任务切换函数工作已经完
15、成。也就是说在任务列表种的初始中断任务不一定是最高优先级的任务。因为比初始任务更高优先级的一个更高优先级的任务可能在中断处理中已经被执行。当然,当所有的中断已经执行后,如果初始中断任务在任务列表中仍然是最高优先级的任务, 系统不需要切换任务,它再次直接通过恢复CPU任务寄存器的值的方式执行。结论到目前为止,所有C / OS-操作系统的移植到ARM7内核微处理器的工作已经完成。为了证明移植的正确性和合理性,在正常使用前,整个代码必须进行测试。测试方法可以根据实际的应用程序微处理器模式编写几个小任务的方式实现。测试可以有助于找到移植移植代码的缺陷,也可以修改移植代码。在移植没有漏洞后,可以将应用程
16、序的任务运行在基于C / OS -操作系统和ARM7内核微处理器系统平台上。引用1 Jean J. Labrosse (USA), C/OS, The Real-Time Kernel M, Beijing:BEIHANG UNIVERSITY PRESS, 2003.52 Xiong Zhenhua, Liao Jiaping, Based on S3C44B0x microprocessor and UCOS- operating system J,China Water Transport,(2006)01.3 Xiang Huaikun, Liang Songfeng, Yuan Yu
17、an, Design of Network-Enabled Traffic Signal Controller Based on CAN and uCOS-J,Journal of Shenzhen Polytechnic, (2008)03.4 Liu Miao, Wang Tianmiao, Wei Hongxing, Real-time Analysis of Embedded CNC System Based on uCOS-IIJ, Computer Engineering,(2006)22.5 Wang Lei, Wang Yaonan, Chen Sisi, The Applic
18、ation Of ucos-ii In Embedded Intelligent Vision Surveillance System J, Control & Automation,(2008)04.6 Li Bei, Peng Chuwu, Building Hardware Application Layer in UCOS TransplantingJ, Electronic Engineering & Product World, (2006)16.Yujun BaoSchool of Electronic Information & Electric Engineering,Cha
19、ngzhou Institute of Technology CZU Changzhou, ChinaXiaoyan Jiang Electric Engineering,Changzhou Institute of TechnologyCZU Changzhou, ChinaAbstractEmbedded System has more and more applications today. Introduced Embedded Operating System in Embedded System has been a tendency of Embedded system deve
20、lopment.Embedded Operating System can avoid different Embedded System hardwares difference, it can greatly reduce the development costs, shorten the research cycle. C/OS- is a kind of excellent Embedded Operating System which is an open source, tiny kernel, consuming little resource and high perform
21、ance in real-time feature. In accordance with more and more 32 Bit ARM7 kernel Microprocessor used in Embedded System, and here introduces the transplantation method of Embedded C/OS- Operating System which based on ARM7 kernel Microprocessor. So the construction of Embedded System Platform which ba
22、sed on C/OS- and ARM7 kernel Microprocessor can have been realized eventually. The platform can efficiently simplify the software developments program flow,shorten the projects research cycle and improve the whole systems performance greatly.Keywords: Embedded System;Embedded Operating System;ARM7 k
23、ernel; C/OS-I. INTRODUCTIONThe so-called Operating System transplantation is that a real time Operating System kernel can be operated in others Microprocessors. That is special code for special CPU. Most codes of C/OS- are written by C programming language,and this is very convenient to transplant C
24、/OS- .But according to the different Microprocessors, the users still need using assembly language to write some programs which are related to the different Microprocessors hardware. This is because when C/OS- reads or writes registers, it only relies on assembly language.1 With the C/OS- Operating
25、Systems requirements,there are three files to be needed when C/OS- transplanted into a certain Microprocessor. And the whole transplantationmainly surrounds the work which creating these three files.These files showed next: In the C language header file OS_CPU.H, some data types which are not concer
26、ned in compiler needed to be defined. These data types include the used stack data type and its growing direction. Some soft interrupts which are concerned in ARM7 kernel are defined in this file, too. Another one OS_CPU_C.C is a source file of C program. The file mainly includes the task stack init
27、ialization function of C/OS- and some user functions which called by C/OS- Operating System. The last one OS_CPU_A.S is a assemble program source file. It is a clock ticks interrupt service function in practice. It is also a task switch function which used to quit interrupt. And it always runs the t
28、ask of highest priority when C/OS- enters the multitask environment firstly.II. CREATING THE FILE OS_CPU.HA. Defining data types which are concerned in complier Because different Microprocessors have different word length, so the transplantation of C/OS- includes a series of data types definition, a
29、nd this make the transplantation possible. Especially for the data types used in C language, such as short, int, long and so on, these data types cant used in C/OS- directly. Because these data types are concerned in the compliers type, they cant be transplanted. So these data types are always defin
30、ed as Integer Data Structures in many cases, they are transplantable.B. Definition of system soft interrupt functionsInterrupt is a kind of hardware mechanism, but in C/OS- Operating System, some important task functions implementation are supposed to depend on interrupt level code.So, at this time, C/OS- Operating System needs a piece of preprocessor
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1