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

TMS320C6657: 程序编译完成无法在线加载,一加载就报错。

Part Number:TMS320C6657Other Parts Discussed in Thread:SYSBIOS

报错内容如下:

[C66xx_0] ti.sysbios.timers.timer64.Timer:line 575:assertion failure: A_notAvailable: static created timer not available

xdc.runtime.Error.raise: terminating execution.

测试环境:

6657芯片带BIOS操作系统 , 把程序中关于定时器的函数都注释掉了,cfg里的timer模块也没打开,芯片复位,甚至main函数中函数注释的只有BIOS_START() ,

程序也下载不到芯片中。一下载指针就直接进入about:exit。并打印出以上语句。

Nancy Wang:

请问新建的工程也会出现这个问题吗?

,

wapdasta:

您好,这个问题是我测试双核启动加载的时候出现的。

以前只用6657的core 0 测试接口,都没问题。现在加了一个core 0 唤醒core 1的步骤,两个核在线debug调试下载工程就会出现这个错误。并且把程序烧写进办卡,也会发现有的核加载不起来。用load symbol看,会看到core指针也是死在这个位置。程序都加载不起来。

昨天用新建的两个核的工程测试。发现core 1现在会一直报这个错误,core0基本没这个错误了。但是我在core1中基本上没做什么关于时钟的。main函数中只加了1个while 1的线程。用了task_sleep();

,

Nancy Wang:

借助BIOS下的一些分析工具看一下,能否看出异常。

https://software-dl.ti.com/ccs/esd/documents/rov_guide/html/src/rov.html

https://www.ti.com/lit/ug/spruh43f/spruh43f.pdf

,

wapdasta:

我使用ROV工具专门看了定时器模块ti.sysbios.timers.timer64.Timer

出现报错的原因如下图:定时器的ID和period不对。ID用16位表示为0x7FFF7FFF.正常应该不超过16.

我也不知道为啥会出现这个现象。程序中定时器是没使用的,没有勾选timer模块。

是不是BIOS系统会为每个核自动开个定时器?核0用id为0的定时器,核1用id为1的定时器?

每个核线程中的Task_sleep应该用的就是这BIOS自动配置的定时器吧。但这个系统分配的ID号为啥会出错。

这个定时器ID异常的现象不知道在哪里改,现在采用的方法是在core0和core1的cfg里额外加入一个只触发一次的定时器。如下图:

这样就能使程序中自带的另一个定时器的ID正常。程序就能正常下载,不会出现以上Timer的错。

,

Nancy Wang:

代码里调用了task_sleep吗?clock模块勾选了吗?

该某块下timer ID是怎么选的?

,

wapdasta:

1,因为用了BIOS系统,多线程。所以肯定得加Task_sleep维护线程间的响应以及等待等。

2,clock模块有勾选,但也仅限于勾选,并没有使用。该模块下的Timer id 应该是默认的ANY。

      测试发现有没有clock模块,都会出现Timer的报错log

     当出现错误timer log的时候,我用ROV工具看clock模块,也看不出有啥异常。

,

Nancy Wang:

您测试的时候core0和core1是不同的cfg文件吗?我在使用同一个cfg测试的情况下多个核一起测试ROV观察下来timer ID显示也是有问题的,但是没有报timer的错误。

timer0和timer1分别专属于core0和core1。如果将timer1分配给core0就会复现出A_notAvailable: static created timer not available该报错。

,

wapdasta:

(1)用的是不同的cfg文件,里面大部分内容是一样的。段的分配地址不一样。

timer ID有问题,那应该就会报timer的错误呀。

反正我测试的时候,只要一报错,那timer ID肯定不对,程序也无法加载。正常的时候TImer id 就是正确的。

这有没有别的解决办法。

(2)

而且发现在同一个核不能用timer_create 的方法同时使用timer id为2,3的定时器。创建timer_create的时候是没有绑定硬件中断的参数。程序会默认自动绑定一个硬件中断号。如15号中断。如果同时创建两个(2,3)。在底层会因为硬件中断号冲突,导致创建失败,只能创建一个。

,

Nancy Wang:

问题1还需要再看一下,暂时不清楚。

关于问题2,可以通过timerParams.intNum修改中断号的。

http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/bios/sysbios/6_76_01_12/exports/bios_6_76_01_12/docs/cdoc/ti/sysbios/timers/timer64/Timer.html

,

wapdasta:

好的,第二个问题我测试一下

,

wapdasta:

第二个定时器的问题是我包含的路径不对。

我之前包含的是ti/sysbios/hal/路径下的Timer.h,这个里面是没有这个intNum的参数的

实际上用用的应该是ti/sysbios/timers/timer64/路径下的Timer.h  这个里面有。

这两个有啥区别呢,感觉都能起定时器。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320C6657: 程序编译完成无法在线加载,一加载就报错。
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1