UCOSS下的多任务控制,出现点问题,请高手帮忙看看!!
有哪位高手可以帮忙看看这一段程序,就是蜂鸣器这个任务一直调用不到,LED和数码管在板子上都可以正常运行,在2131上运行的,原来是要蜂鸣器,同时与leD流水灯、数码管3个任务同步进行的,现在只是实现了2个任务,蜂鸣器上板子一直没反应。//在config.h文件中加入包含SPI.H,并定义HC595_CS、SPI_MOD;
** 在IRQ.S、TARGET.C文件中设置SPI向量中断//
#include "config.h"
#define BEEP 1 << 7
#define LEDS8(0xFF << 18);
#define TASK_STK_SIZE 64
OS_STK TaskStartStk;
OS_STK TaskBeepStk ;
OS_STK TaskledStk ;
OS_STK TaskspiStk ;
//OS_STK TaskKey1Stk ;
voidTaskStart(void *data);
voidTaskBeep(void *data);
voidTaskled(void *data);
voidTaskspi(void *data);
//voidTaskKey1(void *data);
const uint32 LED_TBL[] = {
0x00, 0xFF, // 全部熄灭后,再全部点亮
0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, // 依次逐个点亮
0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, // 依次逐个叠加
0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, // 依次逐个递减
0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, // 两个靠拢后分开
0x81, 0xC3, 0xE7, 0xFF, 0xFF, 0xE7, 0xC3, 0x81 // 从两边叠加后递减
};
void DelayNS (uint32 dly)
{
uint32 i;
for ( ; dly>0; dly--)
for (i=0; i<50000; i++);
}
int main (void)
{
OSInit();
OSTaskCreate(TaskStart, (void *)0, &TaskStartStk, 0);
OSStart();
return 0;
}
uint8 const ShowTable = {
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x00};
// 0 1 2 3 4 5 6 7 8 9
voidTaskStart(void *pdata)
{
pdata = pdata;
TargetInit ();
OSTaskCreate(TaskBeep, (void *)0, &TaskBeepStk, 1); // 创建任务TaskBeep,优先级为3
OSTaskCreate(Taskled, (void *)0, &TaskledStk, 4);
OSTaskCreate(Taskspi, (void *)0, &TaskspiStk, 3);
while (1)
{
OSTimeDly(10);
}
}
voidTaskspi(void *pdata)
{
uint8 temp,i;
pdata = pdata; /* 避免编译警告 */
TargetInit(); /* 目标板初始化 */
PINSEL1 = (PINSEL1 & 0xf3ffffff);
IO0DIR = HC595_CS;
for (;;)
{
for (i = 0; i < 10; i++)
{
SPIStart();
IO0CLR = HC595_CS;
SPIRW(&temp, ~ShowTable);
IO0SET = HC595_CS;
SPIEnd();
OSTimeDly(OS_TICKS_PER_SEC / 5);
}
}
}
void TaskBeep (void *pdata)
{
pdata = pdata;
TargetInit();
//PINSEL0 = 0x00000000; // 设置管脚连接GPIO
PINSEL0 = (PINSEL0 & 0xffff3fff); // P0.16连接GPIO
PINSEL1 = (PINSEL1 & 0xfffffffc);
// IO0DIR &= ~KEY1; // 设置KEY1为输入
IO0SET= BEEP;
IO0DIR |= BEEP;
IO0DIR = BEEP; // 设置蜂鸣器为输出
for (;;)
{
//OSTaskSuspend(OS_PRIO_SELF);
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);
//IO0SET = BEEP; // BEEP停止蜂鸣
//DelayNS(50);
//IO0CLR = BEEP; // BEEP 蜂鸣
//DelayNS(50);
}
}
void Taskled (void *pdata)
{
//INT8Uerr;
//INT16U *pd;
int i;
pdata=pdata;
TargetInit();
PINSEL2 = PINSEL2 & (~0x08);// P1连接GPIO
IO1DIR= LEDS8; // 设置LED1控制口为输出
for (;;)
{
//int i;
for (i=0; i<42; i++)
{ /* 流水灯花样显示 */
IO1SET = ~((LED_TBL) << 18);
DelayNS(20);
IO1CLR = ((LED_TBL) << 18);
DelayNS(20);
}
}
} 回复【楼主位】hero57901122
有哪位高手可以帮忙看看这一段程序,就是蜂鸣器这个任务一直调用不到,led和数码管在板子上都可以正常运行,在2131上运行的,原来是要蜂鸣器,同时与led流水灯、数码管3个任务同步进行的,现在只是实现了2个任务,蜂鸣器上板子一直没反应。
//在config.h文件中加入包含spi.h,并定义hc595_cs、spi_mod;
** 在irq.s、target.c文件中设置spi向量中断//
#include "config.h"
#define beep 1 << 7
#define leds8(0xff << 18);
#define task_stk_size 64
os_stk taskstartstk;
os_stk taskbeepstk [task_st......
-----------------------------------------------------------------------
你的OS_CFG怎么配置的?
还有各可能是你任务堆栈分配的不够,导致任务堆栈溢出!
页:
[1]