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

[复制链接]
3400|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
ayb_ice 发表于 2012-5-30 15:24 | 显示全部楼层
函数内有static变量,不可能重入的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:前进 前进 前进

20

主题

511

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部