This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F28388D: 关于CM4在调试时进入FaultISR中断的问题

Part Number: TMS320F28388D


大家好,

我目前想在CM实现以太网UDP通信,参考Ti例程enet_lwip_udp,我自己新建了一个CM工程,把例程的原文件都移植到我建的工程里,并按照例程的包含路径都设置了一遍,然后编译进行调试,先运行CPU1然后运行CM,发现CM直接进入了FaultISR的死循环里,查看错误寄存器BUSFAULTFLG中的M4BUSFAULT位为1,M4BUSFAULTADDR值为0x1FFFBFFC,就是M4的总线错误,但是没法找到原因。我直接使用Ti例程enet_lwip_udp时能正常实现网口通信,不会出现这样的问题。

然后我使用断点进行准确排查,发现当程序运行到在ethernet.c文件中的函数Ethernet_InitConfig * Ethernet_initInterface( Ethernet_InitInterfaceConfig interfaceConfig )并执行(void)memset(&Ethernet_device_struct, 0, sizeof(Ethernet_Device));语句时,就会直接进入FaultISR死循环,因为我是直接移植的enet_lwip_udp例程代码,所以上述代码可以在例程中找到。

后来我在论坛找到类似的问题:https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1074399/tms320f28388d-lwip-issues

参考这篇问答,我将.stack空间增加到16k也无法解决,而且我也没有明白在.map文件怎么看出是stack内存溢出的,希望能帮忙解答一下

下面是我自建CM工程中的.map文件内容(由于公司内网,没法直接把文件发出来):

SEGMENT ALLOCATION MAP

run origin  load origin   length   init length attrs members
----------  ----------- ---------- ----------- ----- -------
00200000    00200000    00000006   00000006    r-x
  00200000    00200000    00000006   00000006    r-x .resetisr
002001b0    002001b0    00000080   00000080    r--
  002001b0    002001b0    00000080   00000080    r-- .cinit
00200400    00200400    00000140   00000140    r--
  00200400    00200400    00000140   00000140    r-- .vftable
00210000    00210000    00005154   00005154    r-x
  00210000    00210000    00005154   00005154    r-x .text
1fffc000    1fffc000    00000100   00000000    rw-
  1fffc000    1fffc000    00000100   00000000    rw- .stack
1fffe000    00200130    0000007c   0000007c    r-x
  1fffe000    00200130    0000007c   0000007c    r-x .TI.ramfunc
20000800    20000800    00000140   00000000    rw-


SECTION ALLOCATION MAP

 output                                  attributes/
section   page    origin      length       input sections
--------  ----  ----------  ----------   ----------------
.resetisr 
*          0    00200000    00000006     
                  00200000    00000006     startup_ccs.obj (.resetisr:ResetISR)

.cinit     0    002001b0    00000080     
                  002001b0    0000003c     (.cinit..data.load) [load image, compression = lzss]
                  002001ec    0000000c     (__TI_handler_table)
                  002001f8    00000008     (.cinit..bss.load) [load image, compression = zero_init]
                  00200200    00000008     (.cinit..vtable.load) [load image, compression = zero_init]
                  00200208    00000008     (.cinit.LOCALRAMS3_PARA.load) [load image, compression = zero_init]
                  00200210    00000020     (__TI_cinit_table)

.vftable   0    00200400    00000140     
                  00200400    00000140     startup_ccs.obj (.vftable)

.vtable    0    20000800    00000140     UNINITIALIZED
                  20000800    00000140     interrupt.obj (.vtable)

.stack     0    1fffc000    00000100     UNINITIALIZED
                  1fffc000    00000004     rtsv7M4_T_le_v4SPD16_eabi.lib : boot_cortex_m.c.obj (.stack)
                  1fffc004    000000fc     --HOLE--
17:35

然后对比enet_lwip_udp例程中的map文件

.stack     0    1fffc000    00000800     UNINITIALIZED
                  1fffc000    00000004     rtsv7M4_T_le_eabi.lib : boot_cortex_m.c.obj (.stack)
                  1fffc004    000007fc     --HOLE--

发现我的.stack只有100h,而例程的有800h长度,不知道是不是这里出现了问题,希望能帮忙解答一下。