关于ucos进入临界区,恳请大神指教

2019-07-20 19:52发布

都是说临界区的代码是不能被打断的,或者反过来说,如果某段程序不能或者不应该被打断,就应该使用临界区
例如:
1>我看原子和很多其它的例程,OSTaskCreate(...)被放在临界区内,但是我觉得没必要啊,因为OSTaskCreate(...)源码中的关键代码段已经被放在临界区了...
2>下面这段代码需要在哪个地方进入临界区嘛?为什么?
[mw_shl_code=c,true]void lwip_reset_thread(void *p_arg)
{
        struct lwip_info info;
        p_arg = p_arg;
       
        Reset_GPIO_Init();
       
        while(1)
        {
                if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET)
                {
                        OSTimeDlyHMSM(0, 0, 5, 0);
                        if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET)
                        {
                                info.server_ip.addr = 0x3d0aa8c0UL; //default server ip:192.168.10.61
                                info.local_ip.addr  = 0xde0aa8c0UL; //default local ip :192.168.10.222
                                info.netmask.addr   = 0x00ffffffUL; //default netmask  :255.255.255.0
                                info.gateway.addr   = 0x010aa8c0UL; //default gateway  :192.168.10.1
                                info.port           = 0x1f90;       //default port     :8080
                                info.dhcp           = 0;            //default dhcp     :0
                                fatfs_write(file, &info); //将上面这个结构体数据通过fatfs写入flash当中
                                OSSemPost(sem_others);
                                OSSemPost(sem_serverip);
                        }
                }
                OSTimeDlyHMSM(0, 0, 1, 0);
        }
}[/mw_shl_code]


那么关键的问题来了~~~

如何判断某段代码是不可被打断的(需要进入临界区),恳请大神能够讲的清楚,细致点,小弟在此拜谢大神指教~~~

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。