打印

帮忙确认下ucos ii中一个函数是不是可重入的

[复制链接]
2731|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hwk612167|  楼主 | 2012-5-30 12:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#if (OS_EVENT_NAME_SIZE > 1) || (OS_FLAG_NAME_SIZE > 1) || (OS_MEM_NAME_SIZE > 1) || (OS_TASK_NAME_SIZE > 1) || (OS_TMR_CFG_NAME_SIZE > 1)
INT8U  OS_StrCopy (INT8U *pdest, INT8U *psrc)
{
    INT8U  len;

    len = 0;
    while (*psrc != OS_ASCII_NUL) {
        *pdest++ = *psrc++;
        len++;
    }
    *pdest = OS_ASCII_NUL;
    return (len);
}
#endif
这个函数是不是可重入的呢?我认为是可重入的,但在ucos ii中每次调用该函数时,都有如下形式:
    OS_ENTER_CRITICAL();
    len  = OS_StrCopy(pname, pevent->OSEventName);    /* Copy name from OS_EVENT                       */
    OS_EXIT_CRITICAL();

相关帖子

沙发
dong_abc| | 2012-5-30 13:17 | 只看该作者
我不想看你的程序,只说一句,不用公共资源或用公共资源有保护机制(如互斥等)的函数便是可重入函数。

使用特权

评论回复
板凳
ayb_ice| | 2012-5-30 13:30 | 只看该作者
函数本身是可重入的(当然也取决于具体编译器,有KEILC51下基本不重入)
但加OS_ENTER_CRITICAL这些代码,可以防止内存被改变,

使用特权

评论回复
地板
hwk612167|  楼主 | 2012-5-30 14:58 | 只看该作者
你这 公共资源 该怎么理解?函数内部声明的static变量是属于“公共资源”么,这样的函数不是可重入的吧。。。。。 2# dong_abc

使用特权

评论回复
5
ayb_ice| | 2012-5-30 15:24 | 只看该作者
函数内有static变量,不可能重入的

使用特权

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

本版积分规则

个人签名:前进 前进 前进

20

主题

511

帖子

3

粉丝