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

发布时间:2026/7/31 19:34:29

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的优势能坚持到现在已经很不容易了前面最难的适应阶段已经过去了后面的路就会好走很多希望未来还能在其它地方看到你

相关新闻