ucosii实时 *** 作系统的任务不能是中断服务程序,但仍然可以用一个中断服务程序来服务于 *** 作系统的一个或多个任务,比如可以在中断服务程序使中用消息邮箱,或消息队列(OSQPost())等向任务发送按键消息,以唤醒等待按键的任务,注意在中断服务程序的开始调用OSIntEnter();告诉任务进入中断服务,禁止调度,执行完时再调用OSIntExit()来退出中断服务程序,这样,按键任务要做的就是等待按键(比如调用OSQPend()挂起),待唤醒后对按键进行为行处理,同样可以用邮箱等方式与流水等任务通信,告知流水灯任务如何运行,这样,你这两个任务就可以有条不紊的运转起来了
问题一步步解决, 一直停在while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); 不知是哪设置错了 说明UART状态标志位获取不正确,首先看UART的源代码,多看看初始化的流程图,是否完全一致,还得多看看那些控制寄存器,这也是写低屋的一些
这个函数是任务的堆栈初始化函数。--stk = 0x12;可以分解成:1)stk = stk - 1;2)stk = 0x12。在2)中的等号右边的0x12就是任务堆栈初始化函数对stk指针所指内存单元所赋的值。其实它的值可以为任意值,因为你在随后的程序当中可能调用OSCtxSw()函数,其功能是将CPU寄存器的值推入任务的堆栈,任务堆栈的初值都将被覆盖。推荐你都赋值为0x00。另外你的堆栈初始化函数是不是有点问题,因为一般CPU都会含有A寄存器,索引寄存器,状态寄存器,这段代码中好像没有注释。另外你所用的控制器的堆栈的生长方向是UP型还是DOWN型的,如果结合这个问题来看的话,这个函数中的形如stk = 0x12;的代码可能是在提醒你这个堆栈空间是向上生长的。我知道的就这么多。
以上就是关于ucos系统进不了中断怎么回事全部的内容,包括:ucos系统进不了中断怎么回事、用移植到stm32的ucos写串口中断为什么一直死机、ucos ii中OSTaskStkInit函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)