ucos移植到430

楼主
ucos移植到430
把ucos操作系统移植到430是不是使得程序执行的更有效率?不是的话移植进去干什么用? 能详细说说它的用处吗??
请大家解答一下~~~~    不胜感激!!!~
1楼
不带操作系统的程序,所有的代码、任务都是放在一个大循环下的。这种情况如果你的工程里任务不多,那问题不大。但如果你的项目是多任务,那你在最后组合程序的时候会比较棘手。因为你在单独调试每一个模块的时候,模块程序之间是相互独立的死循环。但最后你要把所有单独的模块任务整合到一个大循环下,这时会出现各种各样的问题。有时甚至程序结构都要调整。这个弊端任务越多越明显。

但uCOS可以直接实现死循环和死循环之间的调用(通过设置各个任务的优先级与挂起时间)。这样一来,应对多任务的工程时会有以下好处:1、将多任务明确地模块化,使工程代码更规整,阅读与调试起来更方便,多任务代码的最后整合非常简单;2、使整个系统更稳定。(普通的程序,如果在哪一个任务那里陷入死循环或者跑飞,就会一直卡在那里,没法往下运行了。但uCOS不会,一个任务出现问题不会影响其他任务的进行。因为如果哪个任务死循环了,时间一到你反正要OUT,让其他进程运行的。)

但记住,任何操作系统都是牺牲效率来换取其他方面的便利的。所以单任务或者任务较少时,不推荐用操作系统。只有在多任务实时调度时,uCOS才能发挥出它的优势
2楼
解释的很清楚~~非常感谢!!!
3楼
北夜星辰给出来的比喻真好;不错不错...
是否可以提供一个简单的演示例子?
4楼

#include "includes.h"

#define  TASK_STK_SIZE                  128       // 定义任务堆栈大小    
 
OS_STK   TaskStartStk[TASK_STK_SIZE];
OS_STK   Task1Stk[TASK_STK_SIZE];

void   TaskStart(void *data);                    //前导声明任务(函数)
void   Task1(void *data);                        // 任务 1

void  main (void)
{  
    WDTCTL = WDTPW + WDTHOLD;                              //禁止看门狗
 
    OSInit();                                              //初始化uCOS-II
    OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);
    OSTaskCreate(Task1, (void *)0, &Task1Stk[TASK_STK_SIZE - 1], 3);
   
     
    OSStart();                                             //开始任务调度  
}


void  TaskStart (void *pdata)
{
    pdata  = pdata;                                        // 无任何意义,防止编译器报警

    WDTCTL = WDT_MDLY_32;                                  //设置时钟节拍间隔为32ms    
    IE1   |= 0x01;                                         //开看门狗定时器中断        
    //_DINT();
    /*************************************
    *       应用程序初始化
    *************************************/
   for(;;)
   {    
      P3DIR=BIT0;
      P3OUT=BIT0;
      OSTimeDly(50);  
    }
}

void   Task1(void *pdata)                       
{
    pdata  = pdata;                                        //防止编译器报警
    for(;;)
    {
      P3DIR=BIT1;
      P3OUT=BIT1;
      OSTimeDly(100);  
    }
}

5楼
这是我在ucos的main文件中写的一个简单实例的代码,就是完成两个LED交替发光。

电脑版 Page created in 0.0781 seconds width 2 queries.