TI中文支持网
TI专业的中文技术问题搜集分享网站

C6748 SYS/BIOS Task问题

你好,

使用 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,这里面就是两个任务的:

赞(0)
未经允许不得转载:TI中文支持网 » C6748 SYS/BIOS Task问题
分享到: 更多 (0)