嵌入式系统的开发领域,实时操作系统ucosii占据着相对比较重要的作用。为了深入了解实时操作系统的基本原理,开始认真学习下ucosii。主要是ucosii是开源的,并且网络资料相当丰富,学习起来很方便。
拿到开源的ucos的源码包之后,需要对编译环境进行配置,我使用Ubuntu16.04的操作系统,编译器使用交叉编译工具arm-linux-gcc,目标平台是友善之臂的mini2440开发板。配置交叉编译环境很简单,网上下载工具包,解压到相应位置,修改profile,export环境变量即可。
在mini2440开发板调试,需要移植ucos到mini2440平台,这里暂且忽略。
程序总是从hello world开始!哈哈。
编写一个简单的ucos应用程序:
#include "../include/includes.h"
#define TaskHelloStkLen 100
OS_STK TaskHelloStk[TaskHelloStkLen];
OS_STK TaskMainStk[100];
#define TASK_HELLO_PRIO 5
int main(int argc, char **argv)
{
BoardInit(); //board init;
OSInit(); //ucos init;
OSTimeSet(0); //set system timetick count 0;
OSTaskCreate(TaskMain, (void *)0, &TaskMainStk[99], 4);//create main task;
OSStart(); //start schedule task;
return 0;
}
void TaskMain(void *pdata)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
OS_ENTER_CRITICAL();
Timer0Init(); /* Init Timer0,start timer0 */
OS_EXIT_CRITICAL();
OSTaskCreate(TaskHello, (void *)0, &TaskHelloStk[TaskHelloStkLen-1],TASK_HELLO_PRIO);
while (1) {
// Uart_SendString("\n running in main function\n");
OSTimeDly(OS_TICKS_PER_SEC);
}
}
void TaskHello (void *pdata)
{
pdata = pdata;
while (1) {
Uart_Printf("hello world!\n");
OSTimeDly(OS_TICKS_PER_SEC);
}
}
编译成bin文件,下载到开发板,运行
结果:每秒钟输出一次hello world!
一个简单的ucos程序完成。