为什么tft初始化函数移植到ucosii出问题了

为什么tft初始化函数移植到ucosii出问题了,第1张

如果程序正确并可以通过编译,那么运行结果将是LED_0亮2秒灭2秒的闪烁,LED_1亮5秒灭5秒的闪烁。

不过我觉得这个程序有问题,你的uCOS应该跑不起来,这段程序中,systick_init

在startup_task中初始化,将导致startup_task线程虽然在main中创建了但不能被切换到,因为uCOS的系统滴答时钟都还没有启动。所以应该把systick_init放在main中第一个调用,保证在uCOS启动之前,系统滴答时钟已正常启动。

第一个问题:跟RTOS调度机制无关,调用有返回值的函数,可以选择不接受返回参数

第二个问题:使用了OSTimeDly延时的任务,在延时时间未到时就进入阻塞状态,你想让它进入就绪状态就调用OSTimeDlyResume,延时结束后系统调度程序会让该任务进入就绪状态的

第三个问题:调用OSTimeDly的任务A可以理解成任务A主动进入阻塞状态,放弃当前资源,任务调度程序就切换到任务B执行,待A的延时时间到了时又会切会到任务A继续执行,所以是执行任务调度执行下一个任务的过程中起到了对该任务的延时的作用

这个有几个原因,请参考下面分析:

1,ucos

是多任务 *** 作系统,当系统正常运行时,必须建立一个以上的任务,否则系统处于死机崩溃状态,程序运行出现异常。

2,你的系统时钟中断程序有问题,应该关中断,调用过系统时钟后再开中断,否则系统时钟异常导致程序运行异常,具体程序如下:

void

Tmr_TickISR_Handler

(void)

{

T0IR

=

0xFF;

//清零中断标志位

OSIntEnter(

);

//

关中断,必须有

OSTimeTick();

OSIntExit();

//临界代码完成,与关中断成对使用

}

3,看你上面的程序里面,你想使用定时器1中断来处理一些信息,而程序无法运行到其中,可能的原因有:1)你的定时器1初始化异常。2)你系统里面的中断使能关掉了。其实多任务的时候,你完全可以将它分配到一个任务里处理,这样既可以充分利用多任务,又不会因为中断没处理好而出现异常,如果你想要求实时性较高,那你可以将这个人物的优先级设为最高。

4,UCOS初始化异常,UCOS系统初始化有固定的顺序以及模式,颠倒了就会出现异常。

5,系统时钟tick一般建议为10hz-50hz,太高的话在你初始化的时候,还没创建任务的时候都已经进行任务切换了而导致ucos崩溃。

ucosii实时 *** 作系统的任务不能是中断服务程序,但仍然可以用一个中断服务程序来服务于 *** 作系统的一个或多个任务,比如可以在中断服务程序使中用消息邮箱,或消息队列(OSQPost())等向任务发送按键消息,以唤醒等待按键的任务,注意在中断服务程序的开始调用OSIntEnter();告诉任务进入中断服务,禁止调度,执行完时再调用OSIntExit()来退出中断服务程序,这样,按键任务要做的就是等待按键(比如调用OSQPend()挂起),待唤醒后对按键进行为行处理,同样可以用邮箱等方式与流水等任务通信,告知流水灯任务如何运行,这样,你这两个任务就可以有条不紊的运转起来了

以上就是关于为什么tft初始化函数移植到ucosii出问题了全部的内容,包括:为什么tft初始化函数移植到ucosii出问题了、ucos系统时钟中断处理疑惑,求大神、ARM7在UCOS下如何使用中断等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10624871.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存