打印
[牛人杂谈]

uc/osii在M0516上遇到的奇怪现象!!!

[复制链接]
506|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elephant00|  楼主 | 2021-1-6 11:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在研究uc/osii,刚好论坛上有uc/osii框架已经移植好了的模板NUC1XX uCOS-II Patch_Fix.7z ,就直接拿过来用了,今天发现一个特别奇怪的现象,百思不得其解,先上简要程序:
OS_STK TaskLEDStk1[MaxStkSize];
OS_STK TaskLEDStk2[MaxStkSize];
#define TASK1  2
#define TASK2  3
void task1(void *pdata);
void task2(void *pdata);void SysTick_Handler(void){        OS_CPU_SR  cpu_sr;    OS_ENTER_CRITICAL();;                                           OSIntNesting++;    OS_EXIT_CRITICAL();        OSTimeTick();        OSIntExit();}
void delay(int num)
{        int i;
        for(i=0;i<num;i++)
        i++;
}int32_t main(void)
{
        __disable_irq();
        init_target();
        OSInit();
        OSTaskCreate( task1, (void*)0, &TaskLEDStk1[MaxStkSize-1], TASK1);
        OSStart();
        return 0;   
}
void task1(void *pdata)
{
        OSTaskCreate( task2, (void*)0, &TaskLEDStk2[MaxStkSize-1], TASK2);
        for(;;)
        {
        led_6_on();//led6亮
        delay(300000);//延时只为能看清亮灭状态
        led_6_off();//led6灭        
        }
OSTimeDlyHMSM(0, 0, 0, 500);//控制时间500ms
        }
}
void task2(void *pdata)
{
for(;;)
   {
   delay(5000000);//有意拖长延时时间 约8s左右
        led_7_on();//led7亮
        delay(300000);        
        led_7_off();//led7灭
        }
    OSTimeDlyHMSM(0, 0, 1, 0);//控制时间1s
}编译环境是keil5.10,时钟节拍是利用M0516的系统定时中断来实现的,程序第一次运行时,状态很正常,先是任务1运行,接着运行任务2,由于任务2中的长延时delay(5000000);在此期间任务多次由时钟节拍函数调度切换到任务1,所以任务1被运行多次,这些都是正常的,可问题马上来了,在任务2运行完毕之后开始,第二次运行到任务2中的delay(5000000);延时依然是8S,按理说而任务1在此之间应该同样多次运行才对,因为任务1优先级更高,一旦他准备就绪,时钟节拍中断函数就会发生一次调度,但是为什么任务1一次也没有运行,反而是一直等待delay(5000000);结束,        不光这样,之后只要是进入delay函数,就不能发生任务切换,于是我就设断点查看在delay期间,程序是否进入了系统定时器中断,也就是时钟节拍是否正常发生,我发现,在程序第一次运行时,在delay期间系统定时器如期进入中断,可是在在任务2结束之后,再等到delay之中却再也无法进入系统定时器中断,这也解释了上面说的第二次运行到任务2中的delay(5000000)时无任务切换,因为都没有进入始终节拍函数,更不可能发生调度了,但是但是,我不明白了,我又没有关系统定时器的中断,他怎么就不进中断了呢,怎么就不进了呢,郁闷啊,想不明白了。还望高人给予解惑啊,多谢了

使用特权

评论回复
沙发
taobaofarmer| | 2021-1-6 11:41 | 只看该作者
在OS下没有这么写程序的,延时用OSTimeDly(xxx);或者其它系统提供的延时函数

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

968

主题

2962

帖子

7

粉丝