程序基本架构,CLK函数作为硬件时间中断,每隔200us运行一次,运行SEM_post.然后task1在等待到SEM0发送后执行函数,最后切换到task2,运行后切换到task3.程序基本例程如下
void clk()
{
//采用时间中断,每200us执行一次
SEM_post(&SEM0);
}
void task1()
{
for(;;){
SEM_pend(&SEM0,SYS_FOREVER);
//function
SEM_post(&SEM1);
TSK_yield();
}
}
void task2()
{
for(;;){
SEM_pend(&SEM1,SYS_FOREVER);
//function
TSK_yield();
}
}
以上程序在DEMO中(没有function功能函数添加)运行很正常。但是在实际程序中,CLK-task1-task2之后就开始运行空循环了,不再进入CLK,检查结构也查不出什么,请问能帮忙看看从哪里下手查原因吗?谢谢
noaming:
你好,
建议你添加一些打印,把整个程序的循环过程打印出来,看走到哪里出的问题。
junfeng zhang:
回复 noaming:
经过打印显示,程序第一次运行完task2后,切换到了task1的SEM_pend(&SEM0,SYS_FOREVER);这时候似乎所有的中断都不起效果,时间中断也不会运行,SEM_pend一直在等待。这个是问题点。逻辑上没有错误,难道SEM等待的时候会屏蔽所有中断?
noaming:
回复 junfeng zhang:
你好,
在没有function功能函数添加的情况下,程序打印的是什么情况?
junfeng zhang:
回复 noaming:
假设clk函数打印输出clk,task1和task2输出task1和task2.未添加function功能函数情况下,
clk-task1-task2-clk-task1-task2-clk-task1-task2———-
添加之后,clk-task1-task2.再下来就是一直空循环,不知道循环到哪去了