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 这个里面有。
这两个有啥区别呢,感觉都能起定时器。