打印
[ZLG-ARM]

中间件串口部分的不解

[复制链接]
1638|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liujigan|  楼主 | 2007-6-30 20:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
周立功开发板中间件之串口驱动中,串口接收、发送部分中有一个过程:
        uint8 UART0Getch(void)
{
    uint8 err;

    OS_ENTER_CRITICAL();                    /*关中断*/
    if ((U0LSR & 0x00000001) == 0)
    {                                           /* 没有收到数据 */
        U0IER = U0IER | 0x01;                   /* 允许接收中断 */
        OSSemPend(Uart0Sem, 0, &err);           /* 等待接收数据 */
    }
    err = U0RBR;                                /* 读取收到的数据 */
    OS_EXIT_CRITICAL();                     /*开中断
    return err;


过程中开始关IRQ中断OS_ENTER_CRITICAL();然后等待中断返加的信号量UartSem,我不解的是IRQ关中断后怎么还可以接收到串口中断信号?哪位大侠给指点一下,谢谢了。


相关帖子

沙发
zhu1982lin| | 2007-7-2 19:43 | 只看该作者

我也不清楚,严重关注

请高人指点!

使用特权

评论回复
板凳
liujigan|  楼主 | 2007-7-2 19:57 | 只看该作者

唉,周工不在就不留个看场子的弟子?老周越来越向钱看齐

招点人材全都卖开发板和推销芯片了。

使用特权

评论回复
地板
chwb1975| | 2007-7-3 08:08 | 只看该作者

a

这个是没有错的,因为这是ucos_ii环境下的中间件,关中断只是在当前任务中关中断,如果该任务因为等待信号量被挂起的,就会切换到其它任务,而其它任务的中断不一定是关着的.

使用特权

评论回复
5
liujigan|  楼主 | 2007-7-3 09:19 | 只看该作者

还是不解

中断是公共的吧,我觉得不应该属于某一任务,关中断就是关公共的中断。(通过实验明明知道程序没错,可想不通)

使用特权

评论回复
6
whw_shine| | 2007-8-25 09:54 | 只看该作者

进入临界区

OS_ENTER_CRITICAL();
……
OS_EXIT_CRITICAL();
以上两个为进入和退出临界区,是uc/osii的互斥函数,即其中操作为不可中断的原子操作,在执行其中这些部分的时候不允许中断。你的代码中OS_ENTER_CRITICAL()函数关闭的是硬件中断吗?

使用特权

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

本版积分规则

7

主题

114

帖子

0

粉丝