当前位置: 首页 > news >正文

CLion嵌入式基础开发——基于F570无人机(三)

引言

在上次的文章中我们编写了钩子函数中的代码,本次文章中我会带领大家详细来看一下这些代码,了解一下这些代码底层是如何运作的,这对我们理解FreeRTOS的底层运行原理有很大帮助,这是前两期文章的链接
CLion嵌入式基础开发——基于F570无人机(一)
CLion嵌入式基础开发——基于F570无人机(二)

代码分析

上述代码中我们都在代码块前后添加了对应的宏定义约束,确保任务能否生效都取决于宏定义的状态。我们通过userconfig_RTOS_DEBUG控制着监测任务的状态,我们先声明了任务函数,然后创建了对应的任务,我们在创建任务时将改任务的优先级设置为了osPriorityAboveNormal,这种优先级高于常规的Normal优先级,这样可以确保即便有其它的常规任务函数在运行时系统监测任务也能正常运行。

在任务函数中我们主要监测了CPU运行时间信息、任务状态与栈空间健康度以及动态内存是否泄漏

CPU运行时间统计

代码如下:

vTaskGetRunTimeStats(showbuf);printf("TaskName\tUsername\tCPU\t\n");printf("%s\r\n",showbuf);vTaskDelay(*delaytime);
  • 作用:监测系统中各个任务占用的CPU时间百分比
  • 底层关联:当调用vTaskGetRunTimeStats时,FreeRTOS 内核就会去调用你之前写的那个getRunTimeCounterValue()函数,在该函数中我们会去读取硬件定时器TIM6的值
  • 工作机制:系统会将每个任务的绝对运行时间换算成百分比,并格式化成一个多行字符串写入showbuf中,然后通过串口打印。打印完成后,任务主动挂起休眠
任务状态与栈空间健康度

代码如下:

vTaskList(showbuf);printf("TaskName\tTaskState\tTaskPrio\tStackSize\tTaskNum\r\n");printf("%s\r\n",showbuf);vTaskDelay(*delaytime);
  • 作用: 监测所有任务的当前状态以及是否面临栈溢出风险。

  • 工作机制:vTaskList会遍历整个操作系统的任务控制块,并收集以下信息:

    • TaskState (任务状态):X(运行态 Running)、R(就绪态 Ready)、B(阻塞态 Blocked)、S(挂起态 Suspended)、D(被删除 Deleted)

    • TaskPrio (任务优先级): 当前配置的任务优先级

    • StackSize (历史最小剩余栈空间): 在 FreeRTOS 中,这个值叫做 High Water Mark(高水位线)。它表示该任务自启动以来,栈空间最少剩下过多少。如果这个值接近 0,说明该任务随时可能发生栈溢出崩溃;如果这个值很大,说明任务创建时栈分配得过大,浪费了内存

  • 打印完成后,任务再次进入休眠

动态内存泄漏监测

代码如下:

printf("free heap size : %d bytes\r\n\r\n",xPortGetFreeHeapSize());vTaskDelay(*delaytime);
  • 作用: 监测系统的堆内存健康状况

  • 工作机制: 直接调用xPortGetFreeHeapSize()获取 FreeRTOS 管理的内存堆中当前还有多少空闲字节可以被pvPortMalloc分配

  • 诊断用途: 在长时间运行测试中,如果我们观察到打印出来的free heap size在不断变小,就说明代码中存在内存泄漏

我们编写好对应的程序之后我们可以在文件中声明宏定义并将对应的值设置为1#define userconfig_RTOS_DEBUG 1,定义完成之后我们就可以进行编译烧录的操作了

程序烧录

我们本次使用的烧录器是ST-Link,使用该烧录器在CLion中的开发体验要好于其它的烧录器,我们可以对烧录器进行快速配置,我们可以点击顶部的原生烧录选项

默认情况下大家可能没有下面的ST-LINK选项,如果没有的话可以进行快速的配置,点击下面的编辑调试服务器即可进行配置,在新界面中点击加号,然后选择ST-LINK即可

具体的参数配置可以参照图中的内容,配置完成之后即可点击绿色的下载烧录按键进行下载烧录

在下载之前我们需要选择我们配置好的ST-LINK,不要使用原生选项,点击之后即可成功烧录

结果验证

烧录完成之后我们还要验证现在MCU是否能够实时输出对应的系统信息,此时就需要用串口来进行查看了。这里就不得不提到CLion的另一个强大功能了,它内置了串口插件,我们下载之后就可以直接在软件中查看串口信息了,这样就不用在IDE和串口监测软件之间反复横跳了,我们首先点击右上角的设置图标,然后点击插件选项

在插件界面中我们在搜索框中输入serial port然后下载红色方框内的插件即可

下载完成之后我们可以点击顶部栏中的视图选项,然后选择工具视图,在工具视图中选择串行连接

在新界面中我们需要配置一下串口参数,然后点击连接

连接之后我们即可看到对应的输出参数信息

实时调试

当然我们也可以使用CLion进行便捷的实时体调试操作,具体的操作过程可以参照CLion使用教程——FreeRTOS文章中的操作流程

配置推荐

不知道大家平时的开发习惯是什么,就我个人来说我接触的一门开发语言是C语言,我们的开发习惯就是将大括号单开一行,但是CLion的默认配置是大括号不单开一行尤其是函数定义,默认的布局有点类似于Java的布局,这样的布局看起来会比较变扭,如果你和我的代码风格比较相似,或者你也不习惯官方的代码风格,那么我们就可以自己定义对应的代码格式,

我们可以在系统的设置界面中选择代码样式,然后编辑C/C++的代码延时,我们可以修改对应的代码样式,修改后可以在下面看到实时的样式预览

总结

至此我们就完整的走完了一段Clion的开发流程,我们从底层的项目配置一路到上层的代码编写,在这个过程中我们或多或少的感受到了CLion作为现代化IDE的优势,能坚持到现在已经很不容易了,前面最难的适应阶段已经过去了,后面的路就会好走很多,希望未来还能在其它地方看到你

http://www.jsqmd.com/news/1302194/

相关文章:

  • 3分钟快速上手:PoeCharm中文版让你的流放之路角色构建更简单
  • 从理论到实践:深入理解Norm的核心组件与实现原理
  • 主治医师考试备考资料梳理!过来人亲测实用备考攻略 - 品牌测评鉴赏家
  • 如何安全解锁Microsoft 365完整功能:实用开源方案完整指南
  • AI辅助创业决策的月度总结:从假设验证到商业模式确认的数据驱动路径
  • 竞价推广代运营机构代运营核心价值逻辑与专业实践分析:丽鸿科技行业经验深度解读
  • SwitchEmuModDownloader常见问题解决:无法连接服务器、下载中断与7-Zip依赖错误修复
  • Subfinder终极指南:3种简单方法实现智能字幕查找与批量下载
  • 2026年无锡留学中介选择推荐:五家优选品牌深度解析 - 科技焦点
  • shadcn-docs-nuxt:基于Nuxt Content与shadcn-vue构建的革命性文档模板完全指南
  • 做项目方案时,我为什么不再手动画流程图了?(附AI生成实操)
  • 校园即时配送内卷严重?多元业态重构跑腿盈利优势
  • GigaModels模型部署指南:从训练到机器人控制的无缝衔接
  • 技术人产品化的终极指南:从思维模式到工具链到团队协作的完整框架
  • 5分钟掌握Bebas Neue:免费商用字体的终极设计解决方案
  • CSP 备赛思考|暑假如何合理规划初赛与复赛学习进度
  • 聚力向新共启新程 爱依瑞斯 2026 全国经销商峰会锚定品牌升级方向
  • 2027北京人工智能展预定3.5万平双馆6月启幕
  • KeyboardChatterBlocker:精准解决机械键盘连击问题的Windows智能工具
  • 从安装到部署:ARCharts三种集成方式的对比与最佳实践
  • SoulChat实战案例:失恋、宿舍关系等四大常见心理困扰的AI疏导方案
  • PDF文档比对终极方案:diff-pdf视觉差异检测工具全解析
  • DP2.1连接线性能评测与传输解决方案 - 精彩城市
  • CF488A DSL CF488A NHS 酯水溶性荧光探针大分子共价标记标准化实验操作指南
  • GPT5.6最大更新!ChatGPT和Codex合体意味着什么?
  • 2026年无锡留学申请规划哪家专业:五家优选深度解析 - 科技焦点
  • MCP 最小实战:用 Python 跑通 Host、Client、Server 与 stdio
  • 计算机单片机毕设实战-基于激光传感的智能距离报警控制系统开发 基于 STM32 的 OLED 距离显示与蜂鸣预警装置(014801)
  • 苏州个体户注册 + 记账报税一站式流程,门店创业者必读
  • 揭秘claude-powerline工作原理:核心组件与代码实现分析