都是说临界区的代码是不能被打断的,或者反过来说,如果某段程序不能或者不应该被打断,就应该使用临界区
例如:
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]
那么关键的问题来了~~~
如何判断某段代码是不可被打断的(需要进入临界区),恳请大神能够讲的清楚,细致点,小弟在此拜谢大神指教~~~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>