你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
wdshuang09 发表于 2019-3-24 21:18 工程文件已上传,请帮忙看一下
yklstudent-1794 发表于 2019-3-24 22:24 感觉可能还是你的my_malloc和my_free部分有问题,替换回原来的malloc和free后就没有问题,你在线调试找找 ...
wdshuang09 发表于 2019-3-25 11:58 函数已换成malloc和free的,发送都正常,解析第一次串口收到的数据正常,当串口再接收到一个数据,进行解 ...
yklstudent-1794 发表于 2019-3-25 13:13 给你一个我写的demo: // 解析JSON升级版本与url地址 static bool json_parser_object_update(char *str, ...
wdshuang09 发表于 2019-3-28 08:54 现在已经调通了,有没有遇到这个问题,100ms连续的发数据就会出错,会出现root==NULL,这个问题是怎么造成 ...
yklstudent-1794 发表于 2019-3-28 09:42 const char *err_ptr = cJSON_GetErrorPtr(); 看看返回什么错误
wdshuang09 发表于 2019-3-28 14:02 root = cJSON_Parse((const char*)uart1Buf.Tx_Buffer);//解析串口JSON数据包 if(root == ...
yklstudent-1794 发表于 2019-3-28 17:10 你发送的数据是什么? 你确认接收的数据是否跟发送的数据一致
查看全部评分
STM32隐藏
5.18活动板子会不会是STM32L4呢
STM32 CUBE软件中找不到STM32L4系列单片机
Your UAT Feedback is needed within today.
应用
AAA
1q1q
12345
11
11.08
感觉可能还是你的my_malloc和my_free部分有问题,替换回原来的malloc和free后就没有问题,你在线调试找找啥问题吧,看那步出了问题
函数已换成malloc和free的,发送都正常,解析第一次串口收到的数据正常,当串口再接收到一个数据,进行解析就死机了。
进入
void HardFault_Handler(void)
{
/* Go to infinite loop when Hard Fault exception occurs */
while (1)
{
}
}
解析函数
void ProtocolGetOnePacket(void)
{
cJSON * root = NULL;
cJSON *cmd= NULL;
char *string = NULL;
root = malloc(sizeof(cJSON));
cmd = malloc(sizeof(cJSON));
root = cJSON_Parse((const char*)uart1Buf.Tx_Buffer);
__nop();
if(root != NULL)
{
string=cJSON_PrintUnformatted(root);
printf("%s\n\n", string);
cmd= cJSON_GetObjectItem(root,"cmd");
if(cmd != NULL)
{
if (!strncmp(cmd->valuestring, "get_device_hard", strlen("get_device_hard")))
{
printf("cmd= %s\r\n",(cmd->valuestring));
//Parse_Get_Device_Hard();
}
}
}
cJSON_Delete(root);
free(cmd);
free(string);
free(root);
__nop();
//
}
是不是内存溢出了,但是
我的Heap_Size 只能分配到1K,型号STM32F103C8
如果改成如下就编译通不过
Heap_Size EQU 0x00004000 ;
给你一个我写的demo:
// 解析JSON升级版本与url地址
static bool json_parser_object_update(char *str, int len, mico_content_t * const inContext)
{
const cJSON *json_body = NULL;
cJSON *json_context = cJSON_Parse(str);
if(json_context == NULL)
{
const char *err_ptr = cJSON_GetErrorPtr();
if(err_ptr != NULL)
{
Ql_Debug_Trace("%s", err_ptr);
}
cJSON_Delete(json_context);
return FALSE;
}
json_body = cJSON_GetObjectItem(json_context, "firm_ver");
if( !cJSON_IsString(json_body) )
{
cJSON_Delete(json_context);
return FALSE;
}
Ql_sprintf(inContext->update_ver, json_body->valuestring);
Ql_Debug_Trace("firm_ver=%s", inContext->update_ver);
json_body = cJSON_GetObjectItem(json_context, "file_url");
if( !cJSON_IsString(json_body) )
{
cJSON_Delete(json_context);
return FALSE;
}
Ql_sprintf(inContext->update_url, json_body->valuestring);
Ql_Debug_Trace("file_url=%s", inContext->update_url);
json_body = cJSON_GetObjectItem(json_context, "file_md5");
if( !cJSON_IsString(json_body) )
{
cJSON_Delete(json_context);
return FALSE;
}
Ql_sprintf(inContext->update_md5, json_body->valuestring);
Ql_Debug_Trace("file_md5=%s", inContext->update_md5);
cJSON_Delete(json_context);
return TRUE;
}
你自己参考下
现在已经调通了,有没有遇到这个问题,100ms连续的发数据就会出错,会出现root==NULL,这个问题是怎么造成的?
const char *err_ptr = cJSON_GetErrorPtr();
看看返回什么错误
root = cJSON_Parse((const char*)uart1Buf.Tx_Buffer);//解析串口JSON数据包
if(root == NULL)
{
printf("cJSON_GetErrorPtr: [%s]\n", cJSON_GetErrorPtr());
Beep_sound(1);
goto end;
}
返回的数据看不懂,错误类型为发送JSON数据包中的一部分,
你发送的数据是什么?
你确认接收的数据是否跟发送的数据一致
见图片最底下那一行,间隔300ms,没有问题,只要间隔很快100ms以内就会出错。
你最好把出错时的接收数据打印出来看看是否正常
评分
查看全部评分