这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » ucosii ucosii问题,任务不能超过2个?请讨论讨论!

共2条 1/1 1 跳转至

ucosii ucosii问题,任务不能超过2个?请讨论讨论!

院士
2006-09-17 18:14:16     打赏
ucosii ucosii问题,任务不能超过2个?请讨论讨论!



关键词: ucosii     问题     任务     不能     超过     讨论    

院士
2006-12-22 22:43:00     打赏
2楼
问 源程序:
#include "config.h"

#define  TASK_STK_SIZE       256

OS_STK   TaskStartStk[TASK_STK_SIZE];
OS_STK   TaskStk[TASK_STK_SIZE];

#define      KEY1    (1 << 16)             /* P0.16为KEY1 */
#define      BEEP    (1 << 7)              /* P0.7为蜂鸣器 */
#define      LED1    (1<<22)        /* P0.22引脚控制LED1,低电平点亮 */
#define      LED2    (1<<23)        /* P0.23引脚控制LED2,低电平点亮 */
#define      LED3    (1<<24)        /* P0.24引脚控制LED3,低电平点亮 */
#define      LED4    (1<<25)        /* P0.25引脚控制LED4,低电平点亮 */
#define      BELL    (1<<7)        /* P0.7引脚控制BELL,高电平有效 */


void  TaskStart(void *data);
void  Task(void *data);
void  TaskA(void *data);

int main (void)
{
    OSInit();

    OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);
    OSStart();
    return 0;
}


void  TaskStart(void *pdata)
{
    pdata = pdata;                                                  /* 避免编译警告 */

    TargetInit();                                                   /* 目标板初始化 */

    PINSEL0 = 0x00000000;        // 设置所有管脚连接GPIO
       PINSEL1 = 0x00000000;
   
       IO0DIR |= LED1 + LED2 + LED3 + LED4 + BELL;                // 设置LED4控制口为输出
       IO0SET |= LED1 + LED2 + LED3 + LED4;
       IO0CLR |= BELL;
       OSTimeDly(OS_TICKS_PER_SEC / 10);               /* 延时100毫秒 */
       IO0SET |= BELL;                                    ///关闭蜂鸣器
    OSTaskCreate(Task, (void *)0, &TaskStk[TASK_STK_SIZE - 1], 1); /* 创建任务     */
    OSTaskCreate(TaskA, (void *)0, &TaskStk[TASK_STK_SIZE - 1],10); /* 创建任务     */
        
    for (;;)
    {
           OSTimeDly(OS_TICKS_PER_SEC / 10);               /* 延时20毫秒 */
        IO0CLR |= LED3;
        OSTimeDly(OS_TICKS_PER_SEC / 10);               /* 延时20毫秒 */
        IO0SET |= LED3;
        OSTimeDly(OS_TICKS_PER_SEC / 10);               /* 延时20毫秒 */
        IO0CLR |= LED4;
        OSTimeDly(OS_TICKS_PER_SEC / 10);               /* 延时20毫秒 */
        IO0SET |= LED4;
        
    }
}

void  Task(void *pdata)
{
    pdata = pdata;                                      /* 避免编译警告 */
    
    for (;;)
    {
        
        OSTimeDly(OS_TICKS_PER_SEC / 10);               /* 延时50毫秒 */
        IO0CLR |= LED1;
        OSTimeDly(OS_TICKS_PER_SEC / 10);               /* 延时20毫秒 */
        IO0SET |= LED1;
        OSTimeDly(OS_TICKS_PER_SEC / 10);               /* 延时20毫秒 */
        IO0CLR |= LED2;
        OSTimeDly(OS_TICKS_PER_SEC / 10);               /* 延时20毫秒 */
        IO0SET |= LED2;
    }
}

void  TaskA(void *pdata)
{
    pdata = pdata;                                      /* 避免编译警告 */
    
    for (;;)
    {
        
        IO0CLR = BEEP;
        OSTimeDly(OS_TICKS_PER_SEC / 8);
        IO0SET = BEEP;
        OSTimeDly(OS_TICKS_PER_SEC / 4);

        IO0CLR = BEEP;
        OSTimeDly(OS_TICKS_PER_SEC / 8);
        IO0SET = BEEP;
        OSTimeDly(OS_TICKS_PER_SEC / 4);
    }
}

task任务总是不能运行????? 1: 相同的STK空间???你再看一下   OSTaskCreate(Task, (void *)0, &TaskStk[TASK_STK_SIZE - 1], 1); /* 创建任务     */
    OSTaskCreate(TaskA, (void *)0, &TaskStk[TASK_STK_SIZE - 1],10); /* 创建任务     */

#define  TASK_STK_SIZE       256

OS_STK   TaskStartStk[TASK_STK_SIZE];
OS_STK   TaskStk[TASK_STK_SIZE]; 2: 还是不行axlrose,你有能运行3个任务的程序吗,在2100板上 3: axlrose说的没错,你是怎么改的OS_STK   TaskStartStk[TASK_STK_SIZE];
OS_STK   TaskStk[TASK_STK_SIZE];
OS_STK   TaskStkA[TASK_STK_SIZE];


OSTaskCreate(Task, (void *)0, &TaskStk[TASK_STK_SIZE - 1], 1);
OSTaskCreate(TaskA, (void *)0, &TaskStkA[TASK_STK_SIZE - 1],10); 4: 可以,谢谢axlrose和andrew.xu!程序如下:#define  TASK_STK_SIZE       128

OS_STK   TaskStartStk[TASK_STK_SIZE];
OS_STK   TaskAStk[TASK_STK_SIZE];
OS_STK   TaskBStk[TASK_STK_SIZE];

在MAIN中:
OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);
在TaskStart中:
OSTaskCreate(TaskA, (void *)0, &TaskAStk[TASK_STK_SIZE - 1], 1); /* 创建任务     */
OSTaskCreate(TaskB, (void *)0, &TaskBStk[TASK_STK_SIZE - 1], 10); /* 创建任务     */

OK!

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]