freertos中内存分配需使用pvPortMalloc
问题
使用STM32串口通过WIFI发送CJON数据到服务器,出现任务直接卡死或者运行几次卡死的情况,运行的几次现象有时现象不正常。
解决思路
程序出现卡死,考虑可能是爆栈的问题,将该任务栈大小增加后,问题依旧。
先进行单步调试,定位出现问题的地方,查看是否是代码逻辑错误。
经过单步调试,JON数据创建没有问题,但在执行cJSON_Print()函数时,返回结果为NULL。
uint8_t buf[500] = {0};
cJSON *pose;
pose=cJSON_CreateObject();
cJSON_AddStringToObject(pose,"CMD","$WAVE"); //
cJSON *data;
data=cJSON_CreateObject();
cJSON_AddNumberToObject(data,"Current",Current_Now); //ÉÏ´«Êý¾Ý
cJSON_AddNumberToObject(data,"Voltage",PowerTest); //ÉÏ´«Êý¾Ý
cJSON_AddItemToObject(pose,"Data",data);
char* buff = cJSON_Print(pose);
联系到程序卡死,可能是内存溢出的问题,于是寻找内存相关的程序。
问题解决
在CJON创建的时候确实会进行内存分配,使用的是标准库中的malloc函数,但是在FreeRTOS中,有多种内存分配方式,为了保证线程安全,没有使用malloc和free函数(malloc函数在执行时可能会被其他任务抢占),在本工程中使用的是heap4.c,也是使用情况比较多的一种,其使用的是pvPortMalloc()与vPortFree()。
换言之,之前出现的问题可能是由于malloc函数被抢占。
将CJON中的内存分配函数修改后,问题解决。
static void *(*cJSON_malloc)(size_t sz) = pvPortMalloc;
static void (*cJSON_free)(void *ptr) = vPortFree;
需要注意,任务中需要手动释放内的情况也需要使用对应函数。
if(buff != NULL)
{
vPortFree(buff);
}
相关:
malloc与pvPortMalloc的不同
.
欢迎使用Markdown编辑器
你好! 这是你第一次使用
Markdown编辑器
所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
-
全新的界面设计
,将会带来全新的写作体验; -
在创作中心设置你喜爱的代码高亮样式,Markdown
将代码片显示选择的高亮样式
进行展示; -
增加了
图片拖拽
功能,你可以将本地的图片直接拖拽到编辑区域直接展示; -
全新的
KaTeX数学公式
语法; -
增加了支持
甘特图的mermaid语法
1
功能; -
增加了
多屏幕编辑
Markdown文章功能; -
增加了
焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置
等功能,功能按钮位于编辑区域与预览区域中间; -
增加了
检查列表
功能。
功能快捷键
撤销:
Ctrl/Command
+
Z
重做:
Ctrl/Command
+
Y
加粗:
Ctrl/Command
+
B
斜体:
Ctrl/Command
+
I
标题:
Ctrl/Command
+
Shift
+
H
无序列表:
Ctrl/Command
+
Shift
+
U
有序列表:
Ctrl/Command
+
Shift
+
O
检查列表:
Ctrl/Command
+
Shift
+
C
插入代码:
Ctrl/Command
+
Shift
+
K
插入链接:
Ctrl/Command
+
Shift
+
L
插入图片:
Ctrl/Command
+
Shift
+
G
查找:
Ctrl/Command
+
F
替换:
Ctrl/Command
+
G
合理的创建标题,有助于目录的生成
直接输入1次
#
,并按下
space
后,将生成1级标题。
输入2次
#
,并按下
space
后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用
TOC
语法后生成一个完美的目录。
如何改变文本的样式
强调文本
强调文本
加粗文本
加粗文本
标记文本
删除文本
引用文本
H
2
O is是液体。
2
10
运算结果是 1024.
插入链接与图片
链接:
link
.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去
博客设置
页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的
代码片
.
// An highlighted block
var foo = 'bar';
生成一个适合你的列表
-
项目
-
项目
- 项目
-
项目
- 项目1
- 项目2
- 项目3
-
计划任务 -
完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用
:---------:
居中
使用
:----------
居左
使用
----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII |
HTML |
---|---|---|
Single backticks |
|
‘Isn’t this fun?’ |
Quotes |
|
“Isn’t this fun?” |
Dashes |
|
– is en-dash, — is em-dash |
创建一个自定义列表
-
Markdown
-
Text-to-
HTML
conversion tool - John
- Luke
Authors
如何创建一个注脚
一个具有注脚的文本。
2
注释也是必不可少的
Markdown将文本转换为
HTML
。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式
KaTeX
:
Gamma公式展示
Γ
(
n
)
=
(
n
−
1
)
!
∀
n
∈
N
\Gamma(n) = (n-1)!\quad\forall n\in\mathbb N
Γ
(
n
)
=
(
n
−
1
)!
∀
n
∈
N
是通过欧拉积分
Γ
(
z
)
=
∫
0
∞
t
z
−
1
e
−
t
d
t
.
\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,.
Γ
(
z
)
=
∫
0
∞
t
z
−
1
e
−
t
d
t
.
你可以找到更多关于的信息
LaTeX
数学表达式
here
.
新的甘特图功能,丰富你的文章
-
关于
甘特图
语法,参考
这儿
,
UML 图表
可以使用UML图表进行渲染。
Mermaid
. 例如下面产生的一个序列图:
这将产生一个流程图。:
-
关于
Mermaid
语法,参考
这儿
,
FLowchart流程图
我们依旧会支持flowchart的流程图:
-
关于
Flowchart流程图
语法,参考
这儿
.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到
文章导出
,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
-
注脚的解释
↩︎