Part Number: TMS320F28377D
Other Parts Discussed in Thread: SYSBIOS, C2000WARE
Hi Team,
Here's an issue form the customer may need your help:
Program crashes when running offline in Flash.
I set the flag bit in Task. Every time the program enters a Task, the flag will be incremented once. I found through modbus that when the program runs offline, the flag bit increases first and then remains unchanged, so it is speculated that the Task is blocked. But I don't know why.
I called the ROV online debugging and found that the memory overflowed (it took a long time to run until the program did not work). As shown below:




Then I found out that the reason is that the IPC register is not set according to the preset situation, so the program does not enter while(1). The IPC functions in the two CPUs are as follows:


Here is my understanding:
(1) After CPU1 executes IPCSET.10, it detects that IPCFLG.10=1 (I added a while(1) statement to ensure that the setting is completed, which is also where the problem occurs when the program runs offline). CPU2 detected IPCSTS.10=1;
(2) CPU2 executes the data read statement with IPCSTS.10 as the judgment condition. After completing the data transfer, CPU2 executes IPCACK.10 to clear the flag bit. At this time, CPU2 detects that IPCSTS.10=0. Will IPCFLG in CPU1 be cleared?
Why doesn't the IPC finish set and go to while(1)? How can I ensure that the two CPUs can successfully complete the assertion? How can I test it?
When I block while(IpcRegs.IPCFLG.bit.IPC10 == 0){while_flag2 = 4;}, the program can run offline. But there are similar statements in CPU2, why does CPU2 not enter an infinite loop? Is this something to do with SYSBIOS?

Thanks & Regards
Yale Li