这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 469,ucosII 红皮书第469页 ucosII疑问

共2条 1/1 1 跳转至

469,ucosII 红皮书第469页 ucosII疑问

院士
2006-09-17 18:14:16     打赏
469,ucosII 红皮书第469页 ucosII疑问



关键词: ucosII     红皮     469页     疑问    

院士
2006-12-22 22:43:00     打赏
2楼
问  uint8 UART0Getch(void)
{
    uint8 err;
    OS_ENTER_CRITICAL();
    while((U0LSR & 0x00000001) == 0)              
    {                                           /* 没有收到数据 */
        U0IER = U0IER | 0x01;                   /* 允许接收中断 */
        OSSemPend(Uart0Sem, 0, &err);           /* 等待接收数据 */
    }
    err = U0RBR;                                /* 读取收到的数据 */
    OS_EXIT_CRITICAL();
    return err;
}
函数首先判断UART0的FIFO中是否有数据,如果没有,则允许UART0的接收数据可用中断和等待一个信号量.UART0的中断在接收到数据后会发送这个信号量,函数恢复运行.

问题:
     为了函数可以重入,函数一开始就关了中断OS_ENTER_CRITICAL();,使IRQ中断禁止,也就是说就算UART0硬件收到数据了,程序也不会响应串口IRQ中断程序,那么这个信号量就发不出了
.请问我是不是理解错了?
1: 是的!!!OSSemPend(Uart0Sem, 0, &err);           /* 等待接收数据 */
函数会进行任务切换,当恢复其他任务的时候,中断就打开了,请仔细看看移植代码。
欢迎交流 2: 多谢zxwwwwcom重新看过代码了,明白了,谢谢zxwwwwcom ,我的qq是26505065,大家交流交流! 3: 傻傻地问: "红皮书"是指哪本书? 4: 接着问两个问题:1.“为了函数可以重入,函数一开始就关了中断OS_ENTER_CRITICAL();,”是什么意思,周立功的这个串口驱动里,为什么每个函数都有进入临界区的部分?

2. 请问zxwwwwcom,“函数会进行任务切换,当恢复其他任务的时候,中断就打开了,请仔细看看移植代码。”麻烦您再说的细一点,看移植代码的哪部分?

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]