你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

FreeRTOS如何在中断中内存分配

[复制链接]
黑皮男 提问时间:2016-11-13 16:14 /
最近在玩FreeRTOS,遇到一个问题,就是不知如何在中断中调用内存分配函数。pvPortMalloc函数中会调用xTaskResumeAll,而这个函数不能再中断调用,所以请问在中断中进行内存分配的情况该如何处理。
收藏 1 评论15 发布时间:2016-11-13 16:14

举报

15个回答
高二毛 回答时间:2016-11-15 08:42:52
本帖最后由 高二毛 于 2016-11-15 08:44 编辑
黑皮男 发表于 2016-11-14 17:41
不知我的理解是否正确,按照你说的,如果把数据接收处理部分,USB,串口等都放到一个任务,而这个任务优 ...

可能我没有说清楚,啰嗦一下:
1,中断函数里面接收数据。保存到(通常全局)缓冲区
2,中断出来之后,相关的任务,分析(接收数据)缓冲区数据,该做如何处理按照需要来就行,包括协议判断等等内容。
3,如果需要发送数据,在任务中组好包,启动数据发送
4,发送中断函数中只是在进入中断的时候,简单判断是否有数据还需要发送,如果没有,就表示数据发送完毕了。

这样一个结构:
1,中断(串口,U口,网口)函数只是干数据收,发。不负责解析数据内容。
2,任务负责解析数据内容和协议,并进行处理。
各司其职。
假如后续你更换数据协议了,底层的驱动(中断和HAL操作)都不用修改。只需要修改任务中的处理函数就行。另外,分析数据的任务优先级可能没有必要再最高优先级,通常在整机不是很繁忙的时候,数据处理都是很快的。保证任务顺利调度就行。
当然,最高优先级当然好。先看看有没有更紧急的事情需要做。

有些开发者通常会将协议的解析(比如数据头,尾,校验,长度等)放到中断处理函数中,不建议这个搞。

不知道这次说明白了没有。

评分

参与人数 1ST金币 +5 收起 理由
zero99 + 5

查看全部评分

高二毛 回答时间:2016-11-14 08:48:24
为什么要在中断中分配内存呢?中断里面处理的事情越少越好。可以弄个信号量在中断中通知,由外部的任务完成具体的工作。
天外流星_0 回答时间:2016-11-14 08:49:02
为什么要在中断中用到内存分配??
jcx0324 回答时间:2016-11-14 08:51:11
有风险的                     
黑皮男 回答时间:2016-11-14 12:35:51
高二毛 发表于 2016-11-14 08:48
为什么要在中断中分配内存呢?中断里面处理的事情越少越好。可以弄个信号量在中断中通知,由外部的任务完成 ...

说的也有道理,我是想在串口接受完数据包后,通过队列把数据包发送到队列中,看来还得重新调整一下通信逻辑。
黑皮男 回答时间:2016-11-14 12:37:13
天外流星_0 发表于 2016-11-14 08:49
为什么要在中断中用到内存分配??

看来楼上的回复,想到了之前看到的教程,可以把中断和任务进行同步,来达到目的
高二毛 回答时间:2016-11-14 15:16:29
本帖最后由 高二毛 于 2016-11-14 15:18 编辑
黑皮男 发表于 2016-11-14 12:35
说的也有道理,我是想在串口接受完数据包后,通过队列把数据包发送到队列中,看来还得重新调整一下通信逻 ...

可以再优化一下逻辑:串口 ,USB,网络都是通讯的手段,不应该(当然不是说不可以)在中断里面判断数据是否收发完毕,也不应该判断收到的什么数据。应该交付给上层处理。这样分层进行设计。将来程序的可移植性就非常强了。要不然你一个通讯协议修改一下串口中断驱动。大量的时间做一些不重要的工作。
黑皮男 回答时间:2016-11-14 17:34:45
高二毛 发表于 2016-11-14 15:16
可以再优化一下逻辑:串口 ,USB,网络都是通讯的手段,不应该(当然不是说不可以)在中断里面判断数据是 ...

如果在任务中完成所有的数据接收处理,会不会由于任务切换而导致数据来不及读取而漏掉部分数据。担心的就是这个
黑皮男 回答时间:2016-11-14 17:41:35
高二毛 发表于 2016-11-14 15:16
可以再优化一下逻辑:串口 ,USB,网络都是通讯的手段,不应该(当然不是说不可以)在中断里面判断数据是 ...

不知我的理解是否正确,按照你说的,如果把数据接收处理部分,USB,串口等都放到一个任务,而这个任务优先级设置最高,中断退出后就可以进入该任务进行数据接收,这样应该就不会有遗漏数据的问题了。非常感谢指点
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版