有很多情况您没有说明细,所以大家也不好帮助您。首先不知道您是采用大循环还是UCOS系统来进行程序构架,还有就是用一个就可以跑起来,我的理解是A,B代表2个PID程序块。分别带动两个电机运行。任意使用A或者B都可以带动相应的电机运转,但是同时工作就不行。如果是这样的话,考虑程序的重入问题。也就是说当一个PID正在进行运算时,第二个PID运算调用程序也来调用它。这个时候你的结构体和增量以及相关中间变量是否都有妥善压栈,会不会存在半截数的情况。所谓半截数就是2字节的数据当其中一个字节发生改变,另外一个字节还乜嘢来得及改变时遇到了中断或者高优先级任务抢断。这个时候如果在中断或者高优先级的程序中真好用到了这个数,就会出错(它只改了一半嘛)。一般在程序中需要对这样的数据进行禁止抢占和禁止中断处理,当然也要尽量避免在中断中采用中断以外会发生改变的数据。这一点比较重要。说了这么多也不知道是否能帮上忙。就当是个借鉴吧。
|