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

CC2640R2F: TIOS任务堆栈的问题

Part Number:CC2640R2FOther Parts Discussed in Thread:CC2642R

我的两个自建任务,堆栈开销都比较大,单独跑都没问题,但是同时跑就跑不起来,编译都没问题,我看map文件,ram还有富余,为什么同时跑不起来。

static Char senserTaskStack[1500];
void senser_createTask(void)
{
Task_Params taskParams;
// Configure task
Task_Params_init(&taskParams);
taskParams.stack = senserTaskStack;
taskParams.stackSize = 1500;
taskParams.priority = 4;
Task_construct(&senserTask, senser_taskFxn, &taskParams, NULL);
}

这个任务低于1500,单独跑都跑不起来,所以至少1500;

static Char loraAppTaskStack[512];
void lora_createTask(void)
{
Task_Params taskParams;

// Configure task
Task_Params_init(&taskParams);
taskParams.stack = loraAppTaskStack;
taskParams.stackSize = 512;
taskParams.priority = 3;

Task_construct(&loraAppTask, lorawanThread, &taskParams, NULL);
}

这个任务单独跑没问题,但是如果和上面任务同时跑,上面任务就跑不起来,

这个任务创建是用的堆栈内容是从哪儿分配的,我能不能改大小,现在太小了,两个任务堆栈明显的互相冲突;

风吹我衣:

具体说下,第一个任务用到了库,两个任务同时跑,提示No source available for "init_iaq_1st_gen() at D:TI_WORKSPACE1\simple_observer_cc2640r2lp_app\FlashROM_StackLibrary\simple_observer_cc2640r2lp_app.out:{3} 0x1001b986{4}" ,单独跑哪个任务都一点问题没有,

 这是第一个任务用的库文件格式。

,

Kevin Qiu1:

风吹我衣 说:这个任务创建是用的堆栈内容是从哪儿分配的,我能不能改大小

从RAM中分配的,可以修改

可通过ROV查看每个任务stack的实际使用,参考里面的方法调试:https://dev.ti.com/tirex/content/simplelink_cc2640r2_sdk_5_30_00_03/docs/blestack/ble_user_guide/html/ble-stack-3.x-guide/debugging-index.html#ti-rtos-object-viewer

看不到库里面的内容,对下面的错误没有办法做出判断,如果库仍可访问里面的内容,你可debug看具体哪一步有问题

,

风吹我衣:

<Linking>"D:/work_software/CC2640R2_SDK/simplelink_cc2640r2_sdk_5_30_00_03/source/ti/blestack/common/cc26xx/ccs/cc26xx_app.cmd", line 264: error #10099-D: program will not fit into available memory, or the section contains a call site that requires a trampoline that can't be generated for this section. placement with alignment fails for section ".cinit" size 0x4f9. Available memory ranges: FLASH size: 0x1f000 unused: 0x60 max hole: 0x5c FLASH_LAST_PAGE size: 0x1000 unused: 0x74 max hole: 0x74 error #10010: errors encountered during linking; "simple_observer_cc2640r2lp_app_senserB.out" not built

,

Kevin Qiu1:

这个错误是内存使用的问题,将map文件传上来看一下

,

风吹我衣:

8272.simple_observer_cc2640r2lp_app_senserB.gif右键链接另存为,将后缀gif改成map就可以了

,

Kevin Qiu1:

看了一下,是内存不够用了,申请内存失败了

.cinit     0    00000000    00000504     FAILED TO ALLOCATE

看看其他地方能否删除一些功能增加内存,如果不能或是还有其他功能要实现,则需要更换更大内存的CC2642R

,

风吹我衣:

这是我没开优化,我开优化之后倒是能编译过去,但是执行到库文件就异常了,是不是也和内存不够有关,还有申请内存失败是哪个函数申请内存能定位吗,是不是没有分配足够的堆栈空间,我开启优化之后看map还有很多富裕的ram

,

Kevin Qiu1:

风吹我衣 说:还有申请内存失败是哪个函数申请内存能定位吗,是不是没有分配足够的堆栈空间,我开启优化之后看map还有很多富裕的ram

上面回复的debug中的ROV可以看到各个任务具体的内存分配,库的问题不一定是内存,你还得debug看看

,

风吹我衣:

关键就是库没法调试,不开源。

,

Kevin Qiu1:

当库无法访问时,出现提示No source available这种信息是正常的,参考:

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/738885/faq-ccs-what-does-the-debugger-message-can-t-find-a-source-file-at-or-no-source-available-mean

赞(0)
未经允许不得转载:TI中文支持网 » CC2640R2F: TIOS任务堆栈的问题
分享到: 更多 (0)

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