最近在学习物联网相关的知识,打算用ST的开发板STM32F407ZGT6作为控制中心,上面搭载FreeROTS实时系统,STM32F407开发板作为 TCP client,网络调试助手作为TCP server,利用串口获取两者的连接状态。在用原子的lwip工程移植到自己的STM32F407开发板时,可以正常获取DHCP分配的IP,也能通过网络和网络工具正常通信,但是串口一直提示错误:

从port.c文件中,定位到该行,

从文件中来看,应该是和中断有关的,从网上查阅了很多资料发现,首先怀疑串口的中断的优先级超过FreeRTOS的管理最高优先级,需要将串口中断的优先级降为FreeRTOS的管理最高优先级以下就可以。
据此,分别确认以下中断配置:主函数中,(1)系统中断优先级分组,位于main.c文件(2)串口中断,位于usart.c文件(3)FreeRTOS系统可以管理的中断最高优先级,位于freertosconfig.h文件



可以发现,串口中断的优先级为3,freeRTOS最大可管理的中断优先级是5(中断级小于等于5,freeRTOS无法管理),中断优先级更改为6,发现不行。再继续查阅资料。
发现在ethernetif.c源码中,low_level_input中有一个pbuf_alloc,而源码中恰恰有sys_arch.c的sys_arch_protect()和sys_arch_unprotect()的临界保护
而low_level_input是在中断中调用的。
发现参考DEMO的sys_arch.c中的sys_arch_protect()和sys_arch_unprotect()是使用的任务级的临界保护,所以芯片会出现未知的异常。

改成中断级临界保护,

发现编译下载到板卡中,串口还是会出现同样的问题。
此外sys_mbox_trypost也要用中断级入队函数。

修改为

修改后,重新编译下载,串口打印ok.

出现这个问题应该就是在中断中调用了任务级临界保护,建议逐条查看中断中调用的函数中是否用到了任务级临界保护。
补充说明,lan7820.c中以太网的中断优先级设置(串口中断优先级可以设置为<6),参考例程中设置的优先级是0(FreeRTOS中,数字越小,优先级最高,要与任务优先级区别),FreeRTOS最大的管理优先级是6,因为LWIP中sys_arch.c中使用的是FreeRTOS的任务级函数的API,所以需要将lan8720.c中断优先级设置为>6。
如果lan8720.c中中断优先级<6,那么会出现:能正常获取IP,同时有以下报错:

STM32F407+FreeRTOS+LWIP1.4.1: Error:..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c,441相关推荐

  1. FREERTOS出现断言情况以及解决方法:Error:..\FreeRTOS\portable\RVDS\ARM_CM3\port.c,378

    FREERTOS出现断言情况以及解决方法:Error:-\FreeRTOS\portable\RVDS\ARM_CM3\port.c,378 问题原因: **因为在串口中断的中调用了FREERTOS的 ...

  2. FreeRTOS断言“freertos\portable\rvds\arm_cm3\port.c,244“的解决方法

    FreeRTOS断言"freertos\portable\rvds\arm_cm3\port.c,244"的解决方法 这两天刚上手FreeRTOS,写程序的时候,中途编译烧录调试, ...

  3. STM32F407移植Little vGL系统,freeRTOS系统,FATFS文件系统

    准备freeRTOS源码和一个简单的工程 链接:https://pan.baidu.com/s/1hgyQqoDqDuETEHr_I80M8Q  提取码:e890 另外还需要准备一个简单的工程,这里使 ...

  4. Error:..\FreeRTOS\src\queue.c,1244

    Error:..\FreeRTOS\src\queue.c,1244 今天在学习FreeRTOS操作系统-消息队列的时候发现上电运行的时候就会报错报错信息如下: Error:..\FreeRTOS\s ...

  5. FreeRTOS系列第2篇---FreeRTOS入门指南

    FreeRTOS可以被移植到很多不同架构的处理器和编译器.每一个RTOS移植都附带一个已经配置好的演示例程,可以方便快速启动开发.更好的是,每个演示例程都附带一个说明网页,提供如何定位RTOS演示工程 ...

  6. FreeRTOS 之二 Tracealyzer for FreeRTOS(FreeRTOS+Trace) 详解(源码解析+移植)

    2020/5/19 更新了在使用 4.3.8 时遇到的一些问题说明 2018/5/16 大约一个月之前,Tracealyzer for FreeRTOS目前更新到了4.x,新版本不在区分针对哪个系统, ...

  7. 全网最全最细 FreeRTOS 手册详解——1-The FreeRTOS Distribution

    FreeRTOS :Real Time Engineers Ltd. <A_Hands-On_Tutorial_Guide> 作者:Richard Barry 本专栏是对 FreeRTOS ...

  8. FreeRTOS记录(四、FreeRTOS任务堆栈溢出问题和临界区)

    本来计划是消息队列.信号量.任务通知.事件集.邮件的文章 但是因为自己调试的时候遇到了一个问题,还是把堆栈溢出问题放到前面来说 ..增加临界区的使用说明 2021/11/7 ..临界区的使用部分增加任 ...

  9. FreeRTOS记录(七、FreeRTOS信号量、事件标志组、邮箱和消息队列、任务通知的关系)

    我们在前面单独介绍过FreeRTOS的任务通知和消息队列, 但是在FreeRTOS中任务间的通讯还有信号量,邮箱,事件组标志等可以使用 这篇文章就这些成员与消息队列和任务通知的关系进行说明分析 ..增 ...

最新文章

  1. 2021年回顾与展望
  2. 【ABAP】SAP供应商自定义决裁生成实现
  3. Vue 性能优化--打包优化
  4. AE开发中关于 “无法嵌入互操作类型.........请改用适用的接口”问题的解决方法...
  5. python集合应用场景_十、python 集合的定义与使用
  6. leetcode343. 整数拆分
  7. android自定义协议,Android / iOS-自定义URI /协议处理
  8. mysql与oracle存储过程_5分钟学会oracle与mysql存储过程insertinto
  9. windows 窗口实现隐藏任务栏预览
  10. mpvue(3)主页面搭建
  11. Linux内核5.0版本五大模块及内核书籍推荐
  12. 菜鸟蜕变成高手之菜鸟血淋淋的总结
  13. AssertionError: Attempted unscale_ but _scale is None
  14. 设计一款给爸爸妈妈用的手机
  15. mysql中unl是什么健_UNL类图关系全面剖析
  16. 游程编码(运行长度编码)
  17. 网页如何快速设置成黑白模式
  18. excel poi 加背景图_java 在Excel中插入图片 POI实现
  19. 全网: Mac安装ansible
  20. ExpandListView 的一种巧妙写法

热门文章

  1. 解决ConEmu中文乱码的问题
  2. Vue 进阶系列丨vuex持久化
  3. bm25算法Java代码_BM25算法在Lucene中的应用
  4. android中判断当前上午、中午、晚上
  5. mysql alter table drop primary key_删除主键: Alter table tabname drop primary key(col)
  6. INTEGER PRIMARY KEY AUTOINCREMENT 和 INTEGER PRIMARY KEY 区别
  7. 真实评测 i7 12700f和i7 12700kf区别 i712700f和i712700kf差多少
  8. miniFTP项目实战六
  9. 华为鸿蒙系统界面_谷歌懵圈!华为鸿蒙系统界面首次曝光,网友纷纷表示支持...
  10. TCP/IP协议族-----15、传输控制协议(TCP)