【微城市 源码】【spring boot 启动源码】【修改密码页面源码】PIO源码详解

1.lvgl库在VS Code中PlatformIO平台的码详详细介绍
2.这是一份很全很全的IO基础知识与概念
3.VSCode安装 PlatformIO 插件指南
4.PlatformIO IDE(VSCode) - stm32cube 框架的工程

PIO源码详解

lvgl库在VS Code中PlatformIO平台的详细介绍

       今天我花费了一整天的时间,深入研究了lvgl库及其模拟器在VS Code的码详PlatformIO插件中的使用方法。

       lvgl是码详一个轻量级的图形界面库,主要用于为没有操作系统的码详设备提供图形化界面。

       由于稚晖君的码详HoloCubic固件需要移植,我想先在电脑上进行模拟,码详微城市 源码于是码详开始探索这一领域。

       我在B站上找到了一个教程,码详推荐使用VS Code + PlatformIO来构建lvgl图形界面和PC模拟器。码详在查阅官方文档后,码详我发现作者在GitHub上发布了支持该平台的码详demo,于是码详我开始研究这个库的工作原理和文件结构。

       该项目在GitHub上,码详需要自行下载。码详

       由于稚晖君的码详小电视分辨率是x,但默认demo的分辨率是一个很大的长方形。

       推荐这个方法的B站UP主只教了如何安装,没有详细讲解lvgl库的使用方法,所以我只能在官网的文档中寻找答案。(顺便提一下,官网是全英文的,但谷歌浏览器自带的翻译功能非常出色,基本翻译一遍,再对照英文原文就能理解意思,没有之前学校里做英语阅读理解的厌恶感。不得不承认谷歌yyds,百度毁了我青春。)

       如果有小伙伴还没有安装,spring boot 启动源码可以先看他的视频:

       项目结构

       所有的库文件和demo源代码都在名为.pio的文件夹里。

       注意:如果重复编译时出现错误,需要手动删除build文件夹,再重新编译!

       (现在想想,.pio文件夹下的内容可能是在platformIO的.ini配置文件中填写了其在GitHub的URL,然后自动从代码仓库拉取的。只是个人猜测,还没有验证过,希望各位批评指正。)

       platformio.ini文件:

       这是platformio用来自动补全文件的配置文件,在这里可以设置lvgl的版本、lvgl的驱动版本、模拟器的分辨率等。

       我当时并不知道如何调整分辨率,尝试了许多方法,一开始看到有人说在lv_drv_conf.h中修改,有人说在lv_conf.h中修改。于是我在.pio文件夹下研究了一个下午的源码。

       最后,通过库编写者的友好注释,我成功地在lv_drv_conf.h中找到了名为SDL_HOR_RES(水平向分辨率)和SDL_VER_RES(竖直向分辨率)的两个宏定义常量。

       然后根据注释的要求配置好,但发现调试出来的模拟器分辨率还是老样子!

       就在绝望之际,我想起了platform的配置文件.ini,我打开扫视了一下,修改密码页面源码竟然在这里发现了SDL_HOR_RES和SDL_VER_RES这两个常量和后面的值!我马上修改了这两个值,重新编译了一下(记得要删除build文件夹再重新编译),终于成功了!

       所以在库配置文件中的,也就是lv_drv_conf.h和lv_conf.h中的分辨率设置,应该是实际在设备上运行时使用的。

       本来只是想调整分辨率,结果我把库的源代码学了个遍。算是因祸得福吧。

       真好,又是一个被封在家的一天。

       我在上海闵行,听说我这里是重灾区,小区都封了,解封遥遥无期。但是对于技术宅来说,这简直太开心了!(宅在家变成了正当理由哈哈哈)

这是一份很全很全的IO基础知识与概念

       在操作系统的核心领域,输入/输出(IO)扮演着至关重要的角色,它主要分为磁盘IO和网络IO两个模块,两者在用户空间和内核空间之间穿梭,确保数据传输的高效与稳定。让我们深入探讨一下这两个关键概念。

       首先,IO操作涉及数据在用户空间和内核空间之间的传输,这种切换往往伴随着数据拷贝。influxdb源码编译运行读取操作中,内核会检查缓冲区,可能直接读取数据,或者在数据未就绪时等待。相比之下,写入操作则从用户空间拷贝数据到内核空间,由操作系统决定何时执行磁盘或网络写入。这种内核与用户空间的隔离,是系统稳定性的基石。

       代码示例生动地展示了这种切换:在用户空间执行的赋值操作,一旦涉及到文件写入,就会切换到内核空间。系统调用(如写文件)、异常处理(如缺页)和设备中断是用户态转内核态的常见途径。通过命令行工具top,我们可以实时监控CPU的使用情况,理解任务的运行状态。

       CPU时间分配方面,理想状态是大部分时间处于空闲(idle),而用户空间和内核空间的运行时间则相对较少。例如,7.%的CPU用于用户空间处理,7.0%用于内核空间,其余大部分时间则在等待任务。

       在数据传输方式上,PIO和DMA各有利弊。PIO需要CPU频繁介入,integer.tostring源码效率相对较低,而DMA则允许CPU在数据传输时处理其他任务,降低了CPU的负担。DMA的工作流程包括用户进程请求、操作系统调度、DMA读取数据至内核缓冲区,最后由CPU将数据复制到用户空间。

       在数据复制的过程中,DMA负责内核缓冲区到磁盘或网络设备的传输,而用户空间与内核空间之间的操作则主要由CPU处理。尽管PIO模式在现代系统中已不太常见,理解这些细节对于优化IO性能至关重要。

       缓冲IO和直接IO是两种常见的数据传输策略。缓冲IO通过在内核和用户空间之间设置缓冲区,提升性能,但会增加CPU和内存消耗。而直接IO则跳过内核缓冲,减少数据拷贝,但可能影响性能,尤其在数据不在缓存时。零拷贝IO技术则试图在两者之间找到平衡,减少不必要的拷贝和进程切换,显著提高效率。

       在实际应用中,Apache和Kafka等工具采用零拷贝技术,如sendfile()接口,通过文件描述符和socket操作,实现高效的数据传输。同时,理解同步/异步和阻塞/非阻塞的概念也对网络编程至关重要。同步操作会阻塞等待结果,而非阻塞则会立即返回,如看病和看手机的场景。异步操作允许任务并行进行,提升系统响应速度。

       总的来说,掌握IO操作、其背后的原理以及同步/异步、阻塞/非阻塞的概念,是构建高效网络服务的基础。深入研究操作系统对IO的优化策略,将有助于我们理解高性能服务器的运作机制。如果你对此领域感兴趣,可以参考以下文章来进一步深化理解:

       

嵌入式开发进阶:腾讯首发Linux内核源码

       

嵌入式转内核开发经验分享

       通过这些资源,你将能够更好地把握IO操作的精髓,为你的编程实践增添更强的实战能力。

VSCode安装 PlatformIO 插件指南

       在前文中介绍了如何在Linux环境下安装PlatformIO插件,为VSCode提供强大的集成开发环境功能。平台IO插件的安装对于国内用户来说,确实存在一些访问上的挑战,主要是由于GitHub在国内的访问不稳定或无法访问。不过,我们可以采取一些策略来解决这个问题,实现快速且稳定的安装。

       首先,确保你已经安装了VSCode。你可以在VSCode官网下载,或通过命令行工具进行安装。如果需要,可以使用网盘下载VSCode安装文件,链接为:pan.baidu.com/s/1l8ENb1... 提取码: 。

       安装VSCode后,前往插件中心搜索“platformio ide”,点击安装即可。

       安装插件后,点击VSCode左侧的小蚂蚁图标,进入初始化PIO Core的状态。如果遇到GitHub访问不稳定的情况,初始化过程可能会持续较长时间,甚至失败。此时,推荐采用离线安装方式。

       下载PIO Core的源码。你可以在官方源码压缩文件处获取,或通过上述网盘链接下载。下载后,执行以下命令:

       完成安装后,根据提示,将PIO命令路径添加到环境变量中。可以将内容添加到文件~/.profile。添加完成后,VSCode会自动加载PIO环境,你将看到整个环境的目录结构,如下所示:

       再次启动VSCode,即可成功进入PIO Home。

       接下来,安装MCU平台支持包。支持包包括AVR、STM、ESP等主流单片机,你也可以通过第三方开发的包进行安装。

       对于Ubuntu系统,可以选择直接解压网盘文件的.platformio.zip文件到用户目录。此方法可能不总是生效,具体效果视系统环境而定。

       测试安装的效果,可以创建一个基于单片机的参考例程。首先,安装平台支持包,然后新建基于的ledblink代码例程。最后,利用编译常用快捷命令进行代码编译和调试,验证环境设置是否正确。

       通过上述步骤,你将能够顺利地在Linux环境下安装并使用PlatformIO插件,为你的单片机开发工作提供强大的支持。

PlatformIO IDE(VSCode) - stmcube 框架的工程

       本文详细地介绍了如何在PIO环境中利用STMcube框架建立工程并实现LED周期闪烁程序的过程,对遇到的可能引起LED无法正常闪动的问题进行了针对性的分析与解决,并给出了解决方案与代码示例,旨在为初次使用PIO开发STMcube项目的用户提供实用的参考与指导。

       在创建工程阶段,首先要注意选择正确的框架,本文推荐使用STMcube,它对应的库为cubemx。然后,依据具体硬件选择相应的开发板,如STMFC8(kRAM,kFlash)。操作简单明了,只需在PIO中点击创建即可完成工程初始化。

       在接下来的步骤中,需在src文件夹下新建两个文件,一个为main.h,用于定义全局变量或函数,另一个为main.c,其中包含实际的程序代码。为了确保程序能与硬件相匹配,可参照特定开发板的代码结构进行修改。

       具体的代码结构要求包含LED闪烁逻辑,并需确保开发板与电脑USB端口通过STLink进行连接。使用编译器和上传工具进行程序编译和上传。若LED未如预期闪动,此时需重点检查是否遗漏了系统时钟配置代码。

       针对系统时钟缺失问题,建议参考STMCubeMX生成的普通项目源码,补充相应的时钟配置代码。在新建的sys_basic.h和sys_basic.c文件中,添加时钟配置及可能后续需要用到的处理函数。时钟初始化应在SystemClock_Config函数中实现,比如配置使用8M高速晶振和9倍频时钟源。

       在main.c文件中加入对sys_basic.h的包含,并在HAL_Init()后加入SystemClock_Config()函数调用以完成时钟初始化,此时重新编译并上传程序,LED应按预期闪烁。

       对于程序的调试,本文介绍了与使用Arduino框架类似的过程,需要在配置文件中指定调试工具(如STLink)和调试步骤。通过配置文件platformio.ini和按键F5,可以进行程序调试。

       综上所述,本文从创建工程、添加例程代码、解决常见问题、调试程序到最后的总结,覆盖了使用PIO与STMcube框架开发LED闪烁程序的全过程。希望对初次接触这个开发环境的用户有所帮助。

更多内容请点击【娱乐】专栏

精彩资讯