您好,
我之前已经分别调通helloWorld例程和IPC例程,现在将两个程序进行合并(代码见附图):
在main函数中完成IPC、时钟、DDR、网口的初始化,能够正常通过;
然后进入tsk0,在核0中进行NDK初始化,核1直接task_yeild进入到TestTask1,核0初始化完NDK、创建了UDP发数任务(该任务等级为5,其他任务等级为1) ,UDP没有判到发数标志位,TaskSleep,因此核0也进入到TestTask1,以上步骤都能够正常通过;
然后在TestTask1中进行核0及核1的同步,发现核0一进入Notify函数,就会报错,我去ti文件夹找了相关代码,说的是某个指针为NULL,但是看得不太懂,希望大神帮忙解答一下,为什么会出现这个问题?
以下是代码的图片:
Shine:
程序跑飞的话,先加大堆栈试试。另外,请看一下是不是csl的interrupt API函数和SYS/BIOS的API函数冲突了,建议不要同时用sys/bios和csl来配置中断。请看下面的wiki网站。
If application developers plan to use SYS/BIOS RTOS on their device, then it is recommended that they leverage the relevant SYS/BIOS Interrupt APIs to configure interrupts, and use CSL APIs only where an equivalent function does not exist in the SYS/BIOS APIs. However, here it is important to note that if application developers use both SYS/BIOS and CSL APIs for the purpose of mapping interrupts and writing to the Interrupt Service Table Pointer (ISTP), there will be conflictssince both CSL and SYS/BIOS will assume that they own ISTP.
processors.wiki.ti.com/…/Configuring_Interrupts_on_Keystone_Devices
user4962317:
回复 Shine:
您好,
我的ndk例程和ipc例程都是基于bios的,不存在冲突,我贴了报错的图片,我想请问为什么会报这个错?它底层notify的函数说是指针为空,但为啥会为空?也不像是堆栈不够的问题。
user4962317:
回复 Shine:
您好,
我加大了task的stack还有heap等等,均无效,仍然出错。错误是一执行notify sendevent出来的,指向notifydrivershm,我到这个.c文件看了,对应的626行是Assert isTrue(obj!=NULL,ti_sdo_ipc_Ipc_A_internal),我不太明白这句话什么意思?然后我在工程map文件搜了ti_sdo_ipc……这个,它显示它的地址在0c31d168这里。
Shine:
回复 user4962317:
我把您的问题放到e2e上了,请关注下面帖子的回复。
e2e.ti.com/…/913777
Shine:
回复 Shine:
是否有尝试过C6678 RTOS SDK里的ex11_ping IPC example?