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

最新的CC2652R Zstack 1.6 debug模式下阻塞在ICall_createRemoteTasks是什么原因?

CCS7.4,CC26x2 1.6 SDK

 

CC2652R使用Zstack 1.6 插件和1.6的SDK,uniflash完全擦除flash然后调试,能通过ICall_createRemoteTasks,第二次调试,也能进入main,但运行到ICall_createRemoteTasks就卡住了,没有代码,没办法进一步的调试,如何处理?

Alvin Chen:

我用的也是1.6,你用的那个程序?我自己没遇见这样的现象。 我最近发现uniflash每次烧写之前要全部擦除选择all Unprotect,否则NV里面不会清掉。

Alvin Chen:

回复 Alvin Chen:

 您是否打开了FEATURE_MAC_SECURITY这个预编译?我又试了一下没有问题。

miffy:

回复 Alvin Chen:

我是在zed_switch工程上做的测试,这个工程,默认是没有使能FEATURE_MAC_SECURITY

Alvin Chen:

回复 miffy:

我刚才试了一个zed_switch没有出现,您的板子是否为CC2652R的launchpad ,是否可以排查一下硬件,或者您对demo做了哪些更改。

miffy:

回复 Alvin Chen:

我这边没有用官方的板子,是第三方的板子,更换的CC2652R芯片,可以正常使用,读取IEEE地址,都正常,说明板子没有问题。

debug也能debug,能进入main入口,不是说一点都运行不了,问题就是运行到ICall_createRemoteTasks就卡住了,详细调试之后发现具体是卡在了Task_restore这个函数的位置,没有源代码,不知道什么问题造成的。

帮忙debug一下,看看keytask变量在Task_disable函数调用之后的返回值是多少,是不是0,因为后面卡在Task_restore,我怀疑是这一块代码实现有问题。

/* See header file for comments */
void ICall_createRemoteTasks(void)
{size_t i;UInt keytask;/* Cheap locking mechanism to lock tasks* which may attempt to access the service call dispatcher* till all services are registered.*/keytask = Task_disable();for (i = 0; i < ICALL_REMOTE_THREAD_COUNT; i++){Task_Params params;Task_Handle task;ICall_CSState key;Task_Params_init(&params);params.priority = ICall_threadPriorities[i];params.stackSize = ICall_threadStackSizes[i];params.arg0 = (UArg) icall_threadEntries[i];params.arg1 = (UArg) ICall_getInitParams(i);task = Task_create(ICall_taskEntry, &params, NULL);if (task == NULL){/* abort */ICALL_HOOK_ABORT_FUNC();}key = ICall_enterCSImpl();if (ICall_newTask(task) == NULL){/* abort */ICALL_HOOK_ABORT_FUNC();}ICall_leaveCSImpl(key);}Task_restore(keytask);
}

另外,点击以下小锤子编译,没有一分钟都编译不完,有这么慢吗,又不是全部编译

Alvin Chen:

回复 miffy:

如果不去debug直接烧录可以正常运行?

keytask = Task_disable();这个返回是0 ,因为之前没有Task的建立,最后Task_restore去恢复的标号也是0。

这应该不是程序问题,因为我一直在玩这个板子很长时间没有遇见过这种问题。

至于编译时间确实有点长的,主要不是那个编译时间长,是link出二进制的文件link工具执行占用时间较长。

miffy:

回复 Alvin Chen:

我这边debug下来,keytask变量也是0,但是仍然卡在了最后一步Task_restore,换了两台电脑,都是如此,点击了CCS7.4关于里面的update,升级到最新的编译器等,重新导入工程,测试仍然是这个问题。

下面是我的一些截图,不知道编译器版本,CCS有没有问题,都是默认安装在C:\ti目录下,win7,win10两台电脑都测试了,都是这个问题

Alvin Chen:

回复 miffy:

SimpleLink™ CC26X2R1 SDK: 1.60.00.43
TI Code Composer Studio: CCS-7.4.0
TI Code Generation Tools for ARM: 16.09.06.LTS
XDCTools: 3.50.04.43
看上去你的没啥问题,当然我环境和你的不太一样,我的编译器版本更高一些,是18.1.1.但是你可以编译通过,这就跟编译器。我有两个PC一个装了7.3,一个装了8.0.更像是硬件问题。
你直接烧录hex文件可以启动?

miffy:

回复 Alvin Chen:

我尝试在里面点亮一颗LED,直接烧录hex文件也无法启动,我不认为是硬件问题,既然IEEE地址都可以读取,并且uniflash load image都没问题,说明硬件是可以正常的,不然别的地方都不卡住,就卡在这个地方,而且最主要的是还没有源代码,不清楚这里面到底干了什么事情。

见过那种硬件有问题的,JTEG都连不上。

如果硬件有问题,比如晶振无法启震,芯片引脚短路等等,JTEG都会连不上,更别说erase flash,读取IEEE地址,读取MEMORY都正常。

关键是debug时候还能进入main入口,并且一步一步运行到ICall_createRemoteTasks并卡死,中途查看其他变量,看起来初始化都还算正常。

以前的OSAL也会在启动的时候卡住在Mac_Init初始化的位置,后来跟踪进去发现是使用了外部32.768Khz晶振,没有起震,导致卡住,现在这个TI-RTOS不一样,中间多了一层叫做Icall的middleware中间件,很多都密封进库里面,也看不到,也无法调试,更是无从知道问题出在哪里了。

我很怀疑编译出来的firmware有问题,附件我上传了一个默认的条件编译出来的zed_switch_cc26x2lp.hex和zed_switch_cc26x2lp.out,以及stack映射文件zed_switch_cc26x2lp.map。

另外你那边能否帮忙编译个.hex,点亮RED(当前默认是GIO6引脚)这颗LED,我过来烧写进去看看能否点亮?

/******************************************************************************** @fnzclSampleSw_initialization** @briefInitialize the application** @paramnone** @returnnone*/
static void zclSampleSw_initialization(void)
{/* Initialize user clocks */zclSampleSw_initializeClocks();/* Initialize keys */Board_Key_initialize(zclSampleSw_changeKeyCallback);/* Initialize the LEDS */Board_Led_initialize();// Register the current thread as an ICall dispatcher application// so that the application can send and receive messages.ICall_registerApp(&zclSampleSw_Entity, &sem);//Initialize stackzclSampleSw_Init();Board_Led_control(board_led_type_LED1,board_led_state_ON);
}

zed_switch_cc26x2lp default build output.rar

Alvin Chen:

回复 miffy:

我烧写你那个hex文件 led不亮的。

我自己加了那段代码:

static void zclSampleSw_initialization(void)
{/* Initialize user clocks */zclSampleSw_initializeClocks();/* Initialize keys */Board_Key_initialize(zclSampleSw_changeKeyCallback);/* Initialize the LEDS */Board_Led_initialize();// Register the current thread as an ICall dispatcher application// so that the application can send and receive messages.ICall_registerApp(&zclSampleSw_Entity, &sem);Board_Led_control(board_led_type_LED1, board_led_state_ON);//Initialize stackzclSampleSw_Init();
}

你烧写一下我的那个hex文件是可以点亮的。 zc_switch_cc26x2lp.7z

赞(0)
未经允许不得转载:TI中文支持网 » 最新的CC2652R Zstack 1.6 debug模式下阻塞在ICall_createRemoteTasks是什么原因?
分享到: 更多 (0)