我用的是F28M36芯片,用C28核的timer0和timer1分别控制2个直线电机,程序上先初始化timer0控制的电机,并执行电机机械位置定位流程,流程结束后再初始化timer1控制的电机,并执行电机机械位置定位流程,debug时,两个电机都能定位成功,但是当断电再开电时,只有timer0控制的电机执行初始化流程,后面程序就没反应了,这可能是什么原因?
Johnson Chen1:
是否有有程序分配到FLASH中,但是在RAM中执行?如果有的话,需要用memcopy将程序搬到RAM里面执行。
我用的是F28M36芯片,用C28核的timer0和timer1分别控制2个直线电机,程序上先初始化timer0控制的电机,并执行电机机械位置定位流程,流程结束后再初始化timer1控制的电机,并执行电机机械位置定位流程,debug时,两个电机都能定位成功,但是当断电再开电时,只有timer0控制的电机执行初始化流程,后面程序就没反应了,这可能是什么原因?
Lingling wang:
回复 Johnson Chen1:
我已用memcopy将程序搬到RAM中执行了,感觉是RTOS任务与信号量协调哪里出了问题,我在定时器中断里发送信号量,在任务里等到信号量后,代表一个电机机械位置初始化成功,然后再执行另一个电机的初始化流程,如果我把等待信号量屏蔽掉,定时器就能进中断,加入信号量,定时器就中断溢出,无法进入中断处理函数
F28M36芯片C28有3个CPUtimer,手册里说如果用RTOS就需要用到TIMER2,所以我用的是timer0和timer1