UCOS ‖应用实例

UCOS系统是一个抢占式实习系统内核。

把UCOS系统应用在实际项目当中,首先要建立一个空的系统模版。

  我是下的ST官库。

1.我首先把所有任务都删掉。

2.建立2个空的任务static void App_TaskOne(void);static void App_TaskTwo(void);

3.然后在main()函数里建立一个任务。   

              OSTaskCreate((void (*)(void *)) App_TaskStart,  /* Create the start task.                               */
                          (void          * ) 0,
                          (OS_STK        * )&App_TaskStartStk[APP_TASK_START_STK_SIZE - 1],
                          (INT8U           ) 2
                         );

4.static  void  App_TaskStart (void)函数原型

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);
}

编译运行。我发现只运行任务1并没有运行任务2。我在任务1和任务2当中加入函数OSTimeDlyHMSM(0,0,0,10);发现2个函数都能运行了。但我知道这样做并不是正的成功了。

这样一个函数是延长任务的执行。在这个任务的延时中,系统去执行任务2了。所以2个任务都会被运行。

 

基本思想就是这样。在任务1里没有然后的操作让出CPU。要运行任务2必须让出CPU。就这样我在任务1里加了OSTaskSuspend(8);把任务1挂起。在任务2里OSTaskResume(8);恢复任务2。

 编译运行。发现2个任务循环运行。达到我想要的结果。这只是简单的任务。在实际项目当中,还必须考虑到中断,以及数据的共享。

1.中断,当CPU去执行中断函数的时候。必须考虑的关中断和开中断。以及中断里的数据问题。还有就是中断执行完成以后。返回原来的任务还是执行最高的任务。自己必须先弄清楚。按照系统来讲中断执行完成以后,返回之前会判断原来任务还是不是最高优先级。如果不是则执行最高优先级任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值