|
是因为用做保护,但偶尔无法自动重新启动,发现是故障标志位bit在未执行到清0时,已经被清0了,把位域变量换成short类型变量是没有问题的,将主循环的位域赋值放入临界段也没有问题;
有两个中断在运行,一个是滴答时钟中断,一个是adc中断,adc触发采样由150k的hrpwm触发.
大概就是代码这种操作复现的,想问一下各位大哥有没有其他解决方法,总不能每个位域都加入到临界段;
void SysTick_Handler(void)
{
if(g_fig == 1)
{
g_fig = 0;
g_fault_status.bits.short_cur = 1;
}
}
void ct_control_system_execute(void)
{
// __disable_irq();
g_fault_status.bits.in_v_under = 1;
// __enable_irq();
if(g_fault_status.bits.short_cur)
{
g_fault_status.bits.short_cur = 0;
g_fig = 1;
}
}
|
|