Part Number:CC2642R
工具CCS10,协议栈5.10.00.48.
CC2642R调试过程中,使用float函数,可以运行一段时间,时而跑到一半卡死,复位后正常,时而卡死至无法识别芯片,复位也无效。已有两块单片机无法识别。即使是函数或逻辑出错,也不应该会损坏单片机吧?函数大概如下,是个OLED屏幕显示,先前在CC2640R1F上运行没有什么问题。
static void SimplePeripheral_performPeriodicTask(void)//定时一秒轮询定一秒轮询 { static uint32_t uptime = 0; char TempBuf[20]={0}; uptime++; if(uptime>=255) uptime = 0; sprintf(TempBuf, "time = %3.1f",(float)uptime); OLED_ShowString(0, 32, (u8*)TempBuf, 16,1); } //显示字符串 //x,y:起点坐标 //size1:字体大小 //*chr:字符串起始地址 //mode:0,反色显示;1,正常显示 void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 size1,u8 mode) {while((*chr>=' ')&&(*chr<='~'))//判断是不是非法字符!{OLED_ShowChar(x,y,*chr,size1,mode);if(size1==8)x+=6;else x+=size1/2;chr++;} }
YiKai Chen:
基本上函数或逻辑出错不应该会损坏单片,試試檢查一下你的應用程序有沒有可能會在低電壓的時候操作到NV導致NV损坏?
,
Susan Yang:
xiaoxiong 说:时而卡死至无法识别芯片,复位也无效。已有两块单片机无法识别。即使是函数或逻辑出错,也不应该会损坏单片机吧?
理论上不会造成芯片的损坏。现在这两块芯片还是无法识别?
,
xiaoxiong:
感谢回复。第一块测试几遍还是无法使用,便被遗弃,已经更换了芯片。第二块多次尝试后又可以检测到。后面发现可能是任务堆栈为默认值,未加大导致,现在加大了(#define SP_TASK_STACK_SIZE 2048//1408)好像不出现卡死或死机现象。至于先前为什么造成无法识别还不可知,如果只是内存异常,按道理复位应该还是可以跑起来的。
,
xiaoxiong:
感谢回复。第一块测试几遍还是无法使用,便被遗弃,已经更换了芯片。第二块多次尝试后又可以检测到。后面发现可能是任务堆栈为默认值,未加大导致,现在加大了(#define SP_TASK_STACK_SIZE 2048//1408)好像不出现卡死或死机现象。至于先前为什么造成无法识别还不可知,如果只是内存异常,按道理复位应该还是可以跑起来的。
,
Susan Yang:
是的,如果堆栈溢出的话,是会可能造成死机
,
xiaoxiong:
又有一块芯片出问题了,我怀疑这次供货的芯片是问题芯片。这次来个新问题,烧写引导时,顺带全擦除。烧写后,把app的地址数据恢复了,导致无法烧写app。我使用另一块正常的芯片,全擦除后烧写bim,再读取内存,可以看到内存只从引导开始0X00056000,地址0x00是FF,是可以烧写APP的。这一块问题芯片全擦除后烧写bim,再读取内存,可以看到内存0x00开始有数据,我即使使用强制性擦除,再读取,可以看到全部内存为FF,一旦烧写bim,会占用起始0x00的内存,而且数据是部分app原始数据,像是假性擦除。
以下图片为全擦除后烧写bim
以下图片为全擦除后,烧写bim,再读取内存
以下图片为全擦除后,烧写bim,再读取内存,再烧写app,提示出错
以下为强制性擦除
以下为强制性擦除后,烧写bim,依旧出现占用内存问题
,
Susan Yang:
谢谢您的详细反馈。我们会尽快check该问题。 请问您是在何处购买的芯片呢?
,
xiaoxiong:
不太清楚,公司合作伙伴的。
,
YiKai Chen:
建議先問問你公司合作伙伴在何处购买的芯片
,
Susan Yang:
若是可以的话,请您先确认一下,谢谢