嵌入式系统的开发领域,实时操作系统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程序完成。