Other Parts Discussed in Thread:CC3235S, CC3235SF, UNIFLASH
您好!
最近在使用CC3235芯片,基于OOB工程开发,需要在OOB里面新建两个线程,分配的空间大小分别为4096字节和2048字节。可是运行线程后,provisioningTask线程会卡死在sl_start(),请问这是怎么回事呢?是由于动态分配的内存超量了嘛?
Kevin Qiu1:
你在map文件中看下flash等使用情况,看下有没有超出
,
Kevin Qiu1:
应该没有超出,超出一般会报错
,
user4696099:
刚刚看了map文件,有段说明是这样的MEMORY CONFIGURATIONnameoriginlengthusedunusedattrfill -------------------------------------------------------------------SRAM2200000000000400000003f0c000000f4RW XSRAM200040000003c0000002fd550000c2abRW X
,
Kevin Qiu1:
这部分是SRAM的,都有剩余,你分配的空间是分配到哪里了?
另外flash的使用情况呢
,
user4696099:
空间分配给了线程堆栈
另外,flash的分配是看这个嘛?
SEGMENT ALLOCATION MAPrun originload originlengthinit length attrs members --------------------- ---------- ----------- ----- ------- 200004002000040000003c0000000000rw-200004002000040000003c0000000000rw- .stack 20004000200040000001f20a0001f20ar-x20004000200040000000004000000040r-- .resetVecs20004040200040400001f1ca0001f1car-x .text 20023400200234000000f3e000000000rw-20023400200234000000db3d00000000rw- .bss20030f4020030f40000018a000000000rw- .data 200327e0200327e00000168800001688r--200327e0200327e00000136600001366r-- .const20033b4820033b480000032000000320r-- .cinit
,
user4696099:
OOB工程里面原本有的provisioningTask分配了2048;linklocalTask3072;controlTask2048;otaTask2048;然后我在这个工程里面加了两个线程,分配的空间分别是20484096
,
Kevin Qiu1:
不是这个,OBB例程中原始的map文件应该是这样的:
应该是你程序的问题
,
user4696099:
刚刚打开了一个例程,编译过后生成的.map文件是这样的
,
user4696099:
没有flash_hdr和flash的说明
,
user4696099:
我们用的是CC3235S不是CC3235SF
,
Kevin Qiu1:
CC3232S map文件中确实没有flash部分,你单步运行试了吗?确定是卡到sl_start()这里了?
,
user4696099:
试过了,就是单步运行发现会卡死在provisioningTask线程中的sl_start()中。
,
Kevin Qiu1:
你用uniflash烧录下ServicePack,然后重新下载程序试试
,
user4696099:
在UNiflash中重新加载了ServicePack包,运行代码,没有卡死在sl_start()了,谢谢