UCOS创建任务出现问题
问题:有6个任务
定义
#define Main_Task_STK_SIZE 1024*5
#define DATA_SAVE_STK_SIZE 1024*5
#define MAP_PRO_STK_SIZE 1024*1
#define KEY_PRO_STK_SIZE 1024*5
#define A_PRO_STK_SIZE 1024*5
#define G_DATA_STK_SIZE 1024*5
#define Main_Task_PRIO 6
#define DATA_SAVE_PRIO 10
#define MAP_PRO_PRIO 8
#define KEY_PRO_PRIO 3
#define A_PRO_PRIO 6
#define G_DATA_PRIO 6
OS_STK TaskStartStk[];
OS_STK Main_TaskStk[];
OS_STK DATA_SAVEStk[];
OS_STK MAP_PROStk[];
OS_STK KEY_PROStk[];
OS_STK A_PROStk[];
OS_STK G_DATAStk[];
任务创建
OSTaskCreate(A_PRO, (void *)0,(void *)& A_PROStk[A_PRO_STK_SIZE-1],A_PRO_PRIO);
OSTaskCreate(G_DATA, (void *)0,(void *)& G_DATAStk[G_DATA_STK_SIZE-1],G_DATA_PRIO);
OSTaskCreate(Main_Task, (void *)0,(void *)& Main_TaskStk[Main_Task_STK_SIZE-1],Main_Task_PRIO);
OSTaskCreate(DATA_SAVE, (void *)0,(void *)& DATA_SAVEStk[DATA_SAVE_STK_SIZE-1],DATA_SAVE_PRIO);
OSTaskCreate(MAP_PRO, (void *)0,(void *)&MAP_PROStk[MAP_PRO_STK_SIZE-1],MAP_PRO_PRIO);
OSTaskCreate(KEY_PRO, (void *)0,(void *)&KEY_PROStk[KEY_PRO_STK_SIZE-1],KEY_PRO_PRIO);
当先创建A_PRO任务时,就不能进入G_DATA这个任务(但是如果修改A_PRO的优先权为8时,就能进入G_DATA这个任务);反过来就不能进入A_PRO这个任务。而其他任务创建先后,及优先级对这两个任务均没有影响。
void A_PRO (void *data)
{
data = data;
while(1)
{
OSTimeDlyHMSM(0, 0, 1, 0);
//Beep();//1 通过响声,或者断点来判断是否进入任务 //Beep();//1
}
}
void G_DATA (void *data)
{
data = data;
while(1)
{
OSTimeDlyHMSM(0, 0, 1, 0);
Beep();//1 通过响声,或者断点来判断是否进入任务
}
}
定义
#define Main_Task_STK_SIZE 1024*5
#define DATA_SAVE_STK_SIZE 1024*5
#define MAP_PRO_STK_SIZE 1024*1
#define KEY_PRO_STK_SIZE 1024*5
#define A_PRO_STK_SIZE 1024*5
#define G_DATA_STK_SIZE 1024*5
#define Main_Task_PRIO 6
#define DATA_SAVE_PRIO 10
#define MAP_PRO_PRIO 8
#define KEY_PRO_PRIO 3
#define A_PRO_PRIO 6
#define G_DATA_PRIO 6
OS_STK TaskStartStk[];
OS_STK Main_TaskStk[];
OS_STK DATA_SAVEStk[];
OS_STK MAP_PROStk[];
OS_STK KEY_PROStk[];
OS_STK A_PROStk[];
OS_STK G_DATAStk[];
任务创建
OSTaskCreate(A_PRO, (void *)0,(void *)& A_PROStk[A_PRO_STK_SIZE-1],A_PRO_PRIO);
OSTaskCreate(G_DATA, (void *)0,(void *)& G_DATAStk[G_DATA_STK_SIZE-1],G_DATA_PRIO);
OSTaskCreate(Main_Task, (void *)0,(void *)& Main_TaskStk[Main_Task_STK_SIZE-1],Main_Task_PRIO);
OSTaskCreate(DATA_SAVE, (void *)0,(void *)& DATA_SAVEStk[DATA_SAVE_STK_SIZE-1],DATA_SAVE_PRIO);
OSTaskCreate(MAP_PRO, (void *)0,(void *)&MAP_PROStk[MAP_PRO_STK_SIZE-1],MAP_PRO_PRIO);
OSTaskCreate(KEY_PRO, (void *)0,(void *)&KEY_PROStk[KEY_PRO_STK_SIZE-1],KEY_PRO_PRIO);
当先创建A_PRO任务时,就不能进入G_DATA这个任务(但是如果修改A_PRO的优先权为8时,就能进入G_DATA这个任务);反过来就不能进入A_PRO这个任务。而其他任务创建先后,及优先级对这两个任务均没有影响。
void A_PRO (void *data)
{
data = data;
while(1)
{
OSTimeDlyHMSM(0, 0, 1, 0);
//Beep();//1 通过响声,或者断点来判断是否进入任务 //Beep();//1
}
}
void G_DATA (void *data)
{
data = data;
while(1)
{
OSTimeDlyHMSM(0, 0, 1, 0);
Beep();//1 通过响声,或者断点来判断是否进入任务
}
}
...全文
相关推荐
基于ucos-ii的哲学家就餐问题
在UCOS-II上解决这个问题,首先需要理解UCOS-II的内核机制,包括任务的创建、任务间的通信(信号量、消息队列等)以及调度策略。
UCOS II在MSP430F149上的移植及多任务实例实现
在现代计算领域中,操作系统扮演着至关重要的角色。它作为硬件与软件之间的桥梁,负责管理系统资源、提供用户界面、执行应用程序,并确保系统的稳定和安全运行。UCOS II,作为一款专为嵌入式系统设计的实时操作系统(RTOS),具有高度的可裁剪性和可配置性。其微内核设计允许开发者根据应用需求定制系统的功能,使其在资源受限的嵌入式环境中十分流行。MSP430F149是德州仪器(Texas Instruments)公司生产的一款高性能16位微控制器,它属于MSP430系列。
ucos.rar_ucos_ucos 44b0x
中断处理:移植过程中,需要将UCOS的中断处理函数与44B0X的中断向量表相结合,确保中断能够正确触发和响应。5. 任务创建:根据应用需求,创建UCOS的任务,并配置各个任务的优先级和堆栈大小。6.
ucos多任务程序实例 及其切换原理简析
同时,了解任务切换的机制有助于避免死锁和优先级反转等问题,确保系统的稳定运行。
stm32单片机UCOS操作系统学习代码,创建2个任务.rar_stm32单片机UCOS操作系统学习代码_创建2个任务
此外,还可以深入理解UCOS如何管理和调度任务,以及如何处理任务间的同步问题。对于想要深入掌握STM32和UCOS的开发者来说,这是一个很好的起点,通过实践和调试,能够更好地理解和应用RTOS的原理。


其他硬件开发
