本文主要介绍的是:利用ST官方库实现UCOS多任务。
之前一直都有过,了解UCOS。理解UCOS是一个什么样的系统。并且曾在51上,利用别人的代码跑过。在后来的项目中一直都没有机会用这个系统。最近闲的慌。心血来潮。想好好复习下UCOS这个系统。
我用的芯片是STM32F103VC,外围元件几乎不要。只需一个串口打印数据就OK。
第一步,下载官方提供的系统库。
第二步,
找道APP.C修改如下:
#include <includes.h>
static OS_STK App_TaskStartStk[APP_TASK_START_STK_SIZE];
static OS_STK App_TaskLCDStk[APP_TASK_LCD_STK_SIZE];
static OS_STK App_TaskKbdStk[APP_TASK_KBD_STK_SIZE];
static void App_TaskStart(void);
static void App_TaskOne(void);
static void App_TaskTwo(void);
int main (void)
{
BSP_IntDisAll(); /* Disable all ints until we are ready to accept them. */
OSInit(); /* Initialize "uC/OS-II, The Real-Time Kernel". */
BSP_Init(); /* Initialize BSP functions. */
printf("OS Init OK!\r\n");
OSTaskCreate((void (*)(void *)) App_TaskStart, /* Create the start task. */
(void * ) 0,
(OS_STK * )&App_TaskStartStk[APP_TASK_START_STK_SIZE - 1],
(INT8U ) 2
);
printf("Creat App_TaskStart!\r\n");
OSTimeSet(0);
OSStart(); /* Start multitasking (i.e. give control to uC/OS-II). */
return (0);
}
static void App_TaskStart (void)
{
OS_CPU_SysTickInit();
OSTaskCreate((void (*)(void *)) App_TaskOne, /* Create the start task. */
(void * ) 0,
(OS_STK * )&App_TaskLCDStk[APP_TASK_START_STK_SIZE - 1],
(INT8U ) 8
);
OSTaskCreate((void (*)(void *)) App_TaskTwo, /* Create the start task. */
(void * ) 0,
(OS_STK * )&App_TaskKbdStk[APP_TASK_START_STK_SIZE - 1],
(INT8U ) 9
);
printf("Creat App_TaskStart!\r\n");
OSTimeDlyHMSM(0,0,0,10);
OSTaskDel(2);
}
static void App_TaskOne(void)
{
while(1){
printf("Creat App_TaskOne!\r\n");
OSTimeDlyHMSM(0,0,0,10);
}
}
static void App_TaskTwo(void)
{
while(1){
printf("Creat App_TaskTwo!\r\n");
OSTimeDlyHMSM(0,0,0,10);
}
}