首页/新闻资讯/正文详情

LVGL学习(定义)和FreeRTOS小结(任务,信号量,队列)

发布时间:2026/9/24 8:31:32 来源:云帆数科 栏目:资讯中心
LVGL学习(定义)和FreeRTOS小结(任务,信号量,队列)
提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档文章目录FreeRTOSLVGL总结FreeRTOSPart1:FreeRTOSFreeRTOS学习小结FreeRTOS内核对象1.任务2.信号量二值信号量互斥锁3.队列消息队列1.1任务任务是一个永不返回的函数其任务状态有运行态就绪态阻塞态挂起态每个任务有独立栈空间。运行态正在占用CPU就绪态准备好了可以运行但是CPU被更高优先级任务占用阻塞态任务等待不占用CPU挂起态任务暂停优先级FreeRTOS中任务优先级数越大优先级越高NVIC一般是优先级数越小优先级越高一般对实时性要求较高的任务应尽量提高优先级任务常用函数vTaskDelay(pdMS_TO_TICKS()); 可使任务进入阻塞态进行其他任务不一直占着CPUvTaskDelete();删除任务vTaskSuspend();挂起任务vTaskResume();恢复被挂起任务xtaskcreate();创建任务vTaskStartScheduler()启动调度器在正常的执行任务流程中首先要创建任务填写里面的形参要确保堆的空间是足够的不然会发送栈溢出导致任务无法执行然后进行启动调度器2.信号量事件首先是二值信号量它主要是通过事件触发不传递数据比如说外部中断按键通过按键按下告诉按键按下这个事件告知程序然后程序回答知道了在执行相应的任务。其次是互斥锁多模块同用一个通信协议为了避免竞争抢夺资源通过互斥锁上锁解锁来保护共享资源,并且中断中不能用互斥锁和互斥锁带有优先级继承特点二值信号量的使用1.一般使用需要先在文件中声明一个信号量句柄SemaphoreHandle_t xSemaphore 句柄名字可以根据逻辑编写没有太大要求2.在调度器前创建二值信号量xSemaphorexSemaphoreCreateBinary();事件发生后释放信号量xSemaphoreGive();然后再要执行任务逻辑前进行取信号xSemaphoreTake();在中断中不能使用上面的信号量函数使用下面的xSemaphoreGiveFromISR()释放中断中不能调用xSemaphoreTakeFromISR();并且中断中要快进快出防止丢失其他中断和防止实时性变差避免过久占用CPU互斥锁中的函数定义xSemaphoreTake()为上锁xSemaphoreGive()为解锁信号量的函数xSemaphoreCreate();xSemaphoreGive();xSemaphoreGiveFromISR();xSemaphoreTake();xSemaphoreTakeFromISR();XsemaphoreCreateMutex();队列数据队列是FreeRTOS用于任务与任务之间中断与任务之间传递数据的FIFO缓冲区特点1.FIFO先进先出先放进去的数据先取出来2.可以存放任意类型数据3.有长度限制队列的使用首先要创建队列的句柄 QueueHandle_t xQueue创建队列XQueuexQueueCreate();任务中发送数据xQueueSend();任务中接收数据xQueueReceive();中断里面发送数据要用xQueueSendFromISR();中断中不要有延时要快进快出队列的常用函数xQueueCreate();队列创建xQueueSend();队列数据传输xQueueSendFromISR();中断队列数据传输xQueueReceive();队列数据接收xQueueReceiveFromISR();中断队列数据接收vQueueDelete();删除队列LVGLPart2:LVGL主要是学习了LVGL的移植以及模拟器的使用觉得LVGL基础的东西还是比较容易学习的LVGL是一个嵌入式的图形库是目前嵌入式经常使用的GUI库它的重要点在对象与父子树LVGL所有界面元素都叫对象采用树形父子结构运用是首先要创建一个父级对象然后在此父级对象的基础上进行子级对象的创建和属性的设置父子关系特点1.子级对象坐标通常是在父级对象左上角2.移动父级对象其子级对象也跟着一起移动3.子级对象只能在父级对象的范围内创建不会超出父级对象的范围voidui_Init(){//获取整个硬件屏幕lv_obj_t*scrlv_screen_active();//创建一个小屏幕lv_obj_t*objlv_obj_create(scr);//创建一个按钮lv_obj_t*buttonlv_button_create(obj);//创建一个滑块lv_obj_t*Sliderlv_slider_create(scr);//设置按钮的位置和大小lv_obj_set_pos(button,35,35);lv_obj_set_size(button,30,30);//设置一个滑块的位置和范围//改变的方式1//lv_slider_set_value(Slider,20,LV_ANIM_ON);//lv_slider_set_range(Slider,20,80);//改变的方式2lv_obj_set_pos(Slider,20,10);lv_obj_set_size(Slider,50,10);}这是此模拟器的现象代码主要是设置了一个父级屏幕然后还有三个子级子级分别是子级屏按钮滑块。代码练习通过按键传递数据在串口打印一些文字与执行的活动#includestm32f4xx_hal.h#includemain.h#includestring.h#includeKey.h#includeFreeRTOS.h#includesemphr.h#includequeue.h#includeDebug.h#includePractice.h#includeDebug.huint8_tnum;staticvoidKey1ClickCallBack(void);externUART_HandleTypeDef huart1;externQueueHandle_t xQueueKey;KeyClickHandleTypedef hkey1;voidKey1_Init(){hkey1.GPIO_PortKey1_GPIO_Port;hkey1.GPIO_PinKey1_Pin;hkey1.KeyClickCallBackKey1ClickCallBack;Key_Init(hkey1);}voidKey1_Trigger(){Key_Trigger(hkey1);}voidKey1ClickCallBack(void){num1;xQueueSend(xQueueKey,num,portMAX_DELAY);}在这里插入代码片KEY2同理#includestm32f4xx_hal.h#includemain.h#includeFreeRTOSConfig.h#includeFreeRTOS.h#includequeue.h#includesemphr.h#includetask.h#includeKey.h#includeDebug.hQueueHandle_t xQueueKey;voidPractice_Init(){xQueueKeyxQueueCreate(10,sizeof(uint8_t));}voidvQueueTask(void*pvParameters){uint8_tnum;for(;;){xQueueReceive(xQueueKey,num,portMAX_DELAY);if(num1){PrintString(骑单车喽);}elseif(num2){PrintString(跳舞);}for(inti0;i10;i){PrintString(.);vTaskDelay(pdMS_TO_TICKS(100));}}}总结在lvgl和FreeRTOS的学习路上碰见了很多bug曲折包括了移植栈溢出优先级变量类型不一样导致任务无法执行以及任务卡死导致整个程序无法运行的问题都通过时间的积淀一一解决还要很长的路要走此文是我学习中碰见的一些点和敲代码片段的一些反映也是我的一些学习经验道阻且长行则将至。

相关推荐

Kornia 颜色转换精度修复解析:YUV 与 XYZ 整数输入的计算路径统一(4053)
Kornia 颜色转换精度修复解析:YUV 与 XYZ 整数输入的计算路径统一(4053)

计算机视觉深度学习人工智能图像处理 【免费下载链接】kornia 🐍 空间人工智能的几何计算机视觉库 项目地址: https://gitcode.com/kornia/kornia 点击查看 免费下载 本文基于 Kornia 仓库 changelog.d/migration-108.fixed.md 的变更记录,深… · 2026/9/24 8:31:26

Agent敢开写权限吗?(第二篇):突破一刀切认知,构建AI写权限分级安全体系
Agent敢开写权限吗?(第二篇):突破一刀切认知,构建AI写权限分级安全体系

在前篇文章中,我们厘清了核心结论:AI Agent默认禁止全开写权限,杜绝随意赋予文件修改、删除、覆写权限,从源头规避批量误操作、数据篡改风险。但在真实开发、自动化运维、智能办公场景中,完全关闭写权限会彻底废掉Agen… · 2026/9/24 8:30:30

TLS + Web API 安全 · 01 · TLS 原理与握手
TLS + Web API 安全 · 01 · TLS 原理与握手

一、先看问题:HTTP 是"明信片"HTTP(超文本传输协议)是浏览器和网站之间说话的语言。它的特点就一个字:明文。也就是说,你发出去的内容,在网络上经过的每一台设备(路由器、交换机、Wi-… · 2026/9/24 8:30:30

ctf-wiki 堆利用系列:House Of Force 原理、chunk 尺寸计算与实战
ctf-wiki 堆利用系列:House Of Force 原理、chunk 尺寸计算与实战

文档网络安全教程 【免费下载链接】ctf-wiki Come and join us, we need you! 项目地址: https://gitcode.com/gh_mirrors/ct/ctf-wiki 点击查看 免费下载 House Of Force(下称 HOF)是 glibc ptmalloc2 堆利用技术中经典的一类,其… · 2026/9/25 2:42:40

NixOS 部署 Forgejo 完整指南:services.forgejo 模块详解与从 Gitea 的安全迁移
NixOS 部署 Forgejo 完整指南:services.forgejo 模块详解与从 Gitea 的安全迁移

包管理器操作系统 【免费下载链接】nixpkgs Nix Packages collection & NixOS 项目地址: https://gitcode.com/GitHub_Trending/ni/nixpkgs 点击查看 免费下载 Forgejo 是 Gitea 的一个 soft-fork,强调社区驱动、自托管与联邦(federatio… · 2026/9/25 2:42:40

PyFlink DataStream 窗口操作实战指南:Tumbling / Sliding / Session 窗口的 Python API 用法与源码解析
PyFlink DataStream 窗口操作实战指南:Tumbling / Sliding / Session 窗口的 Python API 用法与源码解析

大数据流处理批处理数据工程 【免费下载链接】flink 项目地址: https://gitcode.com/gh_mirrors/fli/flink 点击查看 免费下载 本文以 PyFlink 官方示例文档 window.rst 为骨架,完整讲解 DataStream API 中三类窗口(滚动窗口 Tumble、滑动窗… · 2026/9/25 2:42:40

Flax/JAX 实战完全指南:基于 Hugging Face Transformers 的模型训练、TPU 部署与团队协作工作流
Flax/JAX 实战完全指南:基于 Hugging Face Transformers 的模型训练、TPU 部署与团队协作工作流

推理引擎大模型 【免费下载链接】FlexGen Running large language models on a single GPU for throughput-oriented scenarios. 项目地址: https://gitcode.com/gh_mirrors/fl/FlexGen 点击查看 免费下载 本文是一份以 Hugging Face Flax/JAX Community Week 为核… · 2026/9/25 2:42:40

Humanizer InDate.Ten 详解:用 DateOnly 流式 API 计算 10 天/周/月/年后的日期
Humanizer InDate.Ten 详解:用 DateOnly 流式 API 计算 10 天/周/月/年后的日期

开发工具 【免费下载链接】Humanizer Humanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities 项目地址: https://gitcode.com/gh_mirrors/hu/Humanizer 点击查看 免费下载 InDat… · 2026/9/25 2:42:40

rpcx RDMA 传输改造:一层薄适配器把 rdmanet.Conn 接入 net.Conn 体系
rpcx RDMA 传输改造:一层薄适配器把 rdmanet.Conn 接入 net.Conn 体系

后端微服务 【免费下载链接】rpcx Best microservices framework in Go, like alibaba Dubbo, but with more features, Scale easily. Try it. Test it. If you feel its better, use it! 𝐉𝐚𝐯𝐚有𝐝𝐮&… · 2026/9/25 2:42:34

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码