如果赋值语句为赋值一个32位的值,那么是不是有可能在16位赋值完毕的时候,被中断所打断呢?
那么我在main循环中和某个中断中公用一个值的时候,且该值为关键的控制量时,做什么处理会比较安全呢?
Green Deng:个人觉得不会,C2000都是32位系统,单次赋值应该不存在一次赋值16位的说法。除非是用的影子寄存器转换的,那样有可能出现被打断的情况
如果赋值语句为赋值一个32位的值,那么是不是有可能在16位赋值完毕的时候,被中断所打断呢?
那么我在main循环中和某个中断中公用一个值的时候,且该值为关键的控制量时,做什么处理会比较安全呢?
user5365243:
回复 Green Deng:
你好,请看上图,其中driver_par.frq_pwm为16位数,他的汇编的赋值指令是一条(不知道这个是不是原子操作,即不会被中断打断的操作)。
而driver_par.kpwm = driver_par.u_n 这条指令则是flout变量之间的赋值,包括下面的driver_par.iuvw_coff = 0.001395089286也是flout型变量的赋值,
这两个语句的汇编指令都为两条以上,我觉得会不会有可能中断会出现在这两条汇编指令之间,如果在中断内有相同的变量进行赋值,不知道会不会导致赋值
受到影响。
如果赋值语句为赋值一个32位的值,那么是不是有可能在16位赋值完毕的时候,被中断所打断呢?
那么我在main循环中和某个中断中公用一个值的时候,且该值为关键的控制量时,做什么处理会比较安全呢?
user5365243:
回复 Green Deng:
好的!十分感谢