STM8L下移植多任务内核(ucos 2.52,hwt_scheduler)。
HWT_Scheduler是自己业余时间写的多任务内核,有兴趣的可以一起讨论。
3个任务,每个任务之间放一个信号量,
3个任务竞争3个信号量,
任务竞争等待左右两个信号量,
两个信号量都获得,LED就亮100ms再熄灭,并释放信号量,继续下一次竞争信号量。
只等到左右一个信号量,等待10ms,继续下一次竞争信号量。
本来该是5个任务,竞争5个信号量,
不过板子只有3个LED,只能用3个任务。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
#define LONG_DELAY_TICKS OS_TICKS_PER_SEC/10
#define SHORT_DELAY_TICKS OS_TICKS_PER_SEC/100
TSem Sem_0={.Count=1};
TSem Sem_1={.Count=1};
TSem Sem_2={.Count=1};
TSK_Implement(0)
{
sei();
while(1)
{
SEM_Pend(&Sem_2);
if(!SEM_Accept(&Sem_0))
{
SEM_Post(&Sem_2);
TSK_Delay(SHORT_DELAY_TICKS);
continue;
}
GPIO_LED_0_On();
TSK_Delay(LONG_DELAY_TICKS);
GPIO_LED_0_Off();
SEM_Post(&Sem_0);
SEM_Post(&Sem_2);
//TSK_Delay(LONG_DELAY_TICKS);
}
}
TSK_Implement(1)
{
sei(); //任务开始开中断
while(1)
{
SEM_Pend(&Sem_0);
if(!SEM_Accept(&Sem_1))
{
SEM_Post(&Sem_0);
TSK_Delay(SHORT_DELAY_TICKS);
continue;
}
GPIO_LED_1_On();
TSK_Delay(LONG_DELAY_TICKS);
GPIO_LED_1_Off();
SEM_Post(&Sem_1);
SEM_Post(&Sem_0);
//TSK_Delay(LONG_DELAY_TICKS);
}
}
TSK_Implement(2)
{
sei(); //任务开始开中断
while(1)
{
SEM_Pend(&Sem_1);
if(!SEM_Accept(&Sem_2))
{
SEM_Post(&Sem_1);
TSK_Delay(SHORT_DELAY_TICKS);
continue;
}
GPIO_LED_2_On();
TSK_Delay(LONG_DELAY_TICKS);
GPIO_LED_2_Off();
SEM_Post(&Sem_2);
SEM_Post(&Sem_1);
//TSK_Delay(LONG_DELAY_TICKS);
}
}
int main()
{
__disable_interrupt(); //任务开始调度前,要关中断
CLK_DeInit();
//切换到HSE
CLK_SYSCLKSourceSwitchCmd(ENABLE);
CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSE);
CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);
while (CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSE);
GPIO_LED_0_Off();
GPIO_LED_0_MakeOutputPushPullSlow();
//LED_0设置为OutputPushPullSlow,初始输出0
GPIO_LED_1_Off();
GPIO_LED_1_MakeOutputPushPullSlow();
//LED_1设置为OutputPushPullSlow,初始输出0
GPIO_LED_2_Off();
GPIO_LED_2_MakeOutputPushPullSlow();
//LED_2设置为OutputPushPullSlow,初始输出0
HS_HeapInit(); //初始化堆
HS_TicksInit(); //系统节拍初始化
TSK_Init(0,0,100);
TSK_Init(1,0,100);
TSK_Init(2,0,100);
TSK_Start(); //任务开始调度(开始调度由空闲任务主函数切换到用户任务)
sei(); //空闲任务主函数开中断,空闲任务主函数也有自己单独的总中断标志位
while(1) //任务空闲时,运行这里
{
//SleepIdle(); //空闲休眠
}
}
点击此处下载 ourdev_627827QFK6TT.rar(文件大小:533K) (原文件名:HWT_Scheduler.rar)
一周热门 更多>