该中断函数在文件CyLib.h和CyLib.c中,这两个文件是在构建工程时自动生成的。
这两个函数可避免多个进程访问共享资源(共享变量与硬件寄存器)产生的冲突。
其中:CyEnterCriticalSection会关闭中断且返回一个中断状态值,CyExitCriticalSection重新打开中断
再举一个例子:
比如写下面这个定时器控制寄存器:
当执行上面这条语句的时候,会按顺序走以下流程:
1. CPU读取TCPWM_BLOCK_CONTROL_REG控制寄存器的值并将它存储到一个临时寄存器内
2. CPU用掩码TCPWM_MASK与临时寄存器执行一个OR操作
3. CPU将OR操作后的结果值重写回到TCPWM_BLOCK_CONTROL_REG控制寄存器
假设有一个正常流程在执行完步骤1后,刚想执行步骤2(但还未开始执行步骤2),此时一个中断A到来,便将该正常流程打断,而该中断A的ISR程序就有可能会有一个它自己的TCPWM_BLOCK_CONTROL_REG控制寄存器值,并将这个值加载到临时寄存器中去做运算(此时会将原先的值覆盖掉),在执行完ISR程序后,此时CPU又恢复之前