你好,
使用 C6748+EDMA+McASP+SYS/BIOS 播放音乐,中间接收发送自己写的list buf使用了malloc函数,BIOS.heapSize = 0x00A00000;足够大。SYS/BIOS创建单个Task0来运行是OK的,播放正常。
但再创建个空的优先级低的Task1,也就是只创建不运行它,实际仍只运行了之前播放音乐的Task0。此时程序就崩溃了。
调试看起来是内存的问题,没查出来具体问题,麻烦大神给看看,多谢了。
B18=0x0 B19=0xc004f468
B20=0xc0a22299 B21=0xc0a24c50
B22=0xc0a1eb7c B23=0x0
B24=0x10a98670 B25=0x4d12fd19
B26=0xff0000 B27=0xc0a24c70
B28=0x0 B29=0xc0a24c70
B30=0xffffffff B31=0xffffffff
NTSR=0x66666666
ITSR=0x36363636
IRP=0xc0a0a434
SSR=0xc0a2233e
AMR=0xfffffff0
RILC=0x0
ILC=0x2
Exception at 0x0
EFR=0x2 NRP=0x0
Internal exception: IERR=0x1
Instruction fetch exception
ti.sysbios.family.c64p.Exception: line 256: E_exceptionMax: pc = 0xc0a24c50, sp = 0xc0a21ff5.
xdc.runtime.Error.raise: terminating execution
Tony Tang:
显示的是取指异常了。
除了heap,stack够大吗?
IRP,中断返回地址是0xC0a2233E,这是DDR地址,这时DDR还能正常读写吗(比如通过CCS memory窗口访问)?sp = 0xc0a21ff5,stack本来是什么位置,多大?有没有溢出?
zc wang:
回复 Tony Tang:
我重新修改了一下参数运行报错: pc = 0xc0a24e38, sp = 0xc0a220d5.
app.cfg文件中配置:
BIOS.heapSize = 0xA00000;
Program.stack = 0x2000;
HeapMem 是0xC0000000~0xC0A00000
task的stacksize=0x8000,从0xc0000070开始
以上是配置以及调试出的信息。
sp = 0xc0a220d5. 堆指针? 看样子是超出了heapMem 。
但还找不到原因,请Tony Tang指点。
只是新建一个低优先级不运行的任务,会影响到原来正常运行的任务吗?
Tony Tang:
回复 zc wang:
sp是stack pointer
你的是带bios的工程,linker.cmd怎么来的?
zc wang:
回复 Tony Tang:
谢谢,Tony Tang。
linker.cmd是自动生成的,我只是想把信息提供的全一些,供您参考。
有关栈的位置都截图了。栈指针是超出范围了,您感觉有可能是哪里出问题了?
新建任务有什么要求呢?我把新创建任务的函数Task_create()等注释掉,只剩原来的一个任务,程序就正常运行了。
Tony Tang:
回复 zc wang:
那把栈加大一些试试。
另外参考sysbios的样例工程Task Mutex Example,这里面就是两个任务的: