<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[wayne2018的博客-心情驿站]]></title><description><![CDATA[码农干的是泥瓦工的活，如果不去努力提高格局，许多年后将依然是干泥瓦工的活。]]></description><link>https://blog.youkuaiyun.com/wayne2018</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wayne2018]]></copyright><item><title><![CDATA[嵌入式 Flash 存储管理实战：基于 Qt 的行程记录模拟器]]></title><link>https://blog.youkuaiyun.com/wayne2018/article/details/155486289</link><guid>https://blog.youkuaiyun.com/wayne2018/article/details/155486289</guid><author>wayne2018</author><pubDate>Tue, 02 Dec 2025 10:47:46 +0800</pubDate><description><![CDATA[在许多嵌入式设备中（如工业控制器、智能仪表），需要将关键运行数据（例如电机脉冲计数）持久化到 NOR Flash 中。由于 Flash 具有以下特性：
• 擦除后为 0xFF
• 只能将 1 写为 0，不能反向操作
• 写入前无需擦除（bit-clearing），但跨页需擦除
• 擦除次数有限（通常 10k~100k 次）
我们必须设计一种只增不减、支持状态标记、满时自动回绕的存储策略。本文将实现一个完整的 行程记录存储管理器，并通过 Qt 模拟器进行可视化调试]]></description><category></category></item><item><title><![CDATA[我是如何开发一款脱机烧录器的？]]></title><link>https://blog.youkuaiyun.com/wayne2018/article/details/147315480</link><guid>https://blog.youkuaiyun.com/wayne2018/article/details/147315480</guid><author>wayne2018</author><pubDate>Thu, 17 Apr 2025 22:53:52 +0800</pubDate><description><![CDATA[但在移植了LVGL后，无故总出现死机问题，后来才知LVGL需要C99编译工具链，而最新的IAR FOR ARM没有对C99的支持。烧录方案参考的是移植DAP Link相关的烧录模块，也就先做了Dap Link开源代码的一直，支持pyocd工具烧录的功能。支持SD卡文件系统U盘存取，烧录等。先上一张实物图，这几个月来，利用业余时间开发的一款脱机烧录器，目前完美支持Nordic 51，52系列烧录。入坑的经历介绍完，再介绍下该脱机烧录器的业务，在现有业余时间资源如此有限情况下，目前是采用开发最小可行产品思路。]]></description><category></category></item><item><title><![CDATA[Windows下使用GCC&CMAKE编译C代码]]></title><link>https://blog.youkuaiyun.com/wayne2018/article/details/140141300</link><guid>https://blog.youkuaiyun.com/wayne2018/article/details/140141300</guid><author>wayne2018</author><pubDate>Wed, 03 Jul 2024 06:17:42 +0800</pubDate><description><![CDATA[GCC&CMAKE编译一些C代码用来做一些嵌入式开源组件模块或者开发阶段前期代码测试非常好用。]]></description><category></category></item><item><title><![CDATA[基于CodeBlocks环境搭建LVGL在PC端模拟器]]></title><link>https://blog.youkuaiyun.com/wayne2018/article/details/140062379</link><guid>https://blog.youkuaiyun.com/wayne2018/article/details/140062379</guid><author>wayne2018</author><pubDate>Sat, 29 Jun 2024 12:41:41 +0800</pubDate><description><![CDATA[基于CodeBlocks环境搭建LVGL在PC端模拟器]]></description><category></category></item><item><title><![CDATA[Windows下添加ESP-IDF到右键菜单]]></title><link>https://blog.youkuaiyun.com/wayne2018/article/details/135568282</link><guid>https://blog.youkuaiyun.com/wayne2018/article/details/135568282</guid><author>wayne2018</author><pubDate>Sat, 13 Jan 2024 12:27:48 +0800</pubDate><description><![CDATA[实现在任意目录下，通过鼠标右键，选择esp_idf here直接打开esp-idf编译窗口]]></description><category></category></item><item><title><![CDATA[嵌入式软件工程师做些什么？]]></title><link>https://blog.youkuaiyun.com/wayne2018/article/details/135365321</link><guid>https://blog.youkuaiyun.com/wayne2018/article/details/135365321</guid><author>wayne2018</author><pubDate>Wed, 03 Jan 2024 15:33:25 +0800</pubDate><description><![CDATA[MCU芯片从晶圆厂生产出来到用户手中的产品，整个产业链的不同环节都有嵌入式软件工程师的身影。软件开发是一项综合性的工作，需要综合运用技术、设计和创新思维。作为一个终端产品开发的嵌入式软件工程师，我想探讨一下嵌入式软件工程师岗位的工作，主要是为了明确我们要做的事情，以及为什么这么做。通过这种方式找到嵌入式软件开发工作的重心及目标，解决职业发展方向的问题是一个及其重要的问题。不能做那种战术上的高手，却是战略上的智障的一类人。]]></description><category></category></item><item><title><![CDATA[复数向量缓存数据结构]]></title><link>https://blog.youkuaiyun.com/wayne2018/article/details/133513642</link><guid>https://blog.youkuaiyun.com/wayne2018/article/details/133513642</guid><author>wayne2018</author><pubDate>Tue, 03 Oct 2023 10:12:56 +0800</pubDate><description><![CDATA[相对于实数向量，复数向量数据结构中增加了对复数变量的结构。示例图结构FFT算法模块展示]]></description><category></category></item><item><title><![CDATA[向量，矩阵，时间序列数据结构]]></title><link>https://blog.youkuaiyun.com/wayne2018/article/details/133513524</link><guid>https://blog.youkuaiyun.com/wayne2018/article/details/133513524</guid><author>wayne2018</author><pubDate>Tue, 03 Oct 2023 09:58:54 +0800</pubDate><description><![CDATA[用在数字信号处理算法计算时窗的向量，矩阵，时间序列数据结构array\_mem。]]></description><category></category></item><item><title><![CDATA[从fifo数据结构到环形缓存结构]]></title><link>https://blog.youkuaiyun.com/wayne2018/article/details/133513414</link><guid>https://blog.youkuaiyun.com/wayne2018/article/details/133513414</guid><author>wayne2018</author><pubDate>Tue, 03 Oct 2023 09:45:27 +0800</pubDate><description><![CDATA[在嵌入式开发中，FIFO（先入先出）数据结构常被用于字符设备的数据缓存。FIFO结构允许生产者（Producer）和消费者（Consumer）分别存入和取出数据，其中，生产者存入单个字节，消费者则取出单个字节。该结构的核心特点是遵循先入先出的原则，确保数据按照其存入的顺序被取出。]]></description><category></category></item><item><title><![CDATA[嵌入式通信数据帧缓存数据结构]]></title><link>https://blog.youkuaiyun.com/wayne2018/article/details/133513169</link><guid>https://blog.youkuaiyun.com/wayne2018/article/details/133513169</guid><author>wayne2018</author><pubDate>Tue, 03 Oct 2023 09:06:22 +0800</pubDate><description><![CDATA[嵌入式开发中，数据的传输和处理涉及到多个模块之间的交互。为了确保数据的连续性和避免数据丢失或堆积，往往需要在各个模块之间设置缓存机制]]></description><category></category></item><item><title><![CDATA[基于W801-SDK 内部flash读写封装示例]]></title><link>https://blog.youkuaiyun.com/wayne2018/article/details/133476647</link><guid>https://blog.youkuaiyun.com/wayne2018/article/details/133476647</guid><author>wayne2018</author><pubDate>Mon, 02 Oct 2023 03:08:14 +0800</pubDate><description><![CDATA[旨在可以定义flash变量，通过简单接口来实现读写。可以使用统一的接口形式，读写外部eeprom, flash存储等。]]></description><category></category></item><item><title><![CDATA[嵌入式项目实战之系统架构]]></title><link>https://blog.youkuaiyun.com/wayne2018/article/details/133300659</link><guid>https://blog.youkuaiyun.com/wayne2018/article/details/133300659</guid><author>wayne2018</author><pubDate>Tue, 26 Sep 2023 11:04:16 +0800</pubDate><description><![CDATA[ 嵌入式产品固件开发是一个多层面、多维度的过程，大致可以分为三大方向：技术开发，业务开发和系统架构开发。]]></description><category></category></item><item><title><![CDATA[嵌入式项目实战之EEPROM读写（示例：STM8S GPIO模拟IIC读写EEPROM）]]></title><link>https://blog.youkuaiyun.com/wayne2018/article/details/131915847</link><guid>https://blog.youkuaiyun.com/wayne2018/article/details/131915847</guid><author>wayne2018</author><pubDate>Tue, 25 Jul 2023 13:36:48 +0800</pubDate><description><![CDATA[项目使用STM8S005芯片，IIC使用HK24C32,实现了单字节读写，页写，多字节读写功能。主要有3个文件如下。]]></description><category></category></item><item><title><![CDATA[嵌入式项目实战之固件IAP升级解决方案（示例芯片CH32V307R）]]></title><link>https://blog.youkuaiyun.com/wayne2018/article/details/131484168</link><guid>https://blog.youkuaiyun.com/wayne2018/article/details/131484168</guid><author>wayne2018</author><pubDate>Fri, 30 Jun 2023 21:51:43 +0800</pubDate><description><![CDATA[MCU固件IAP升级的业务主要是固件下载和写入，其中固件管理业务主要又包括版本管理，校验等。固件升级的文件都是BIN文件格式，看过不少升级方案，固件升级文件都是在BIN文件格式上增加一些前缀或后缀信息，俗称为“打包”。前缀或后缀信息包括了固件版本，校验信息，通过这种方式实现固件管理业务虽然没问题，但增加了打包解包的业务，管理起来也增加复杂程度。本文提到的方案中，MCU固件方案是通过把版本管理，校验信息通过编译器编译到固件内，不需要额外的“打包”业务。方案如下，其中APP就是MCU主程序。]]></description><category></category></item><item><title><![CDATA[基于Zephyr系统驱动开发介绍]]></title><link>https://blog.youkuaiyun.com/wayne2018/article/details/128887914</link><guid>https://blog.youkuaiyun.com/wayne2018/article/details/128887914</guid><author>wayne2018</author><pubDate>Sun, 05 Feb 2023 07:10:54 +0800</pubDate><description><![CDATA[Zephyr规范定义了很多术语，但道理相通。就像C语言中的数据类型及赋初值，对应了C++中的对象及实例化。Zephyr系统规范定义了统一的设备类型device。特定的设备，例如gpio端口，定义了统一的驱动类型及接口函数，例如gpio。设备树节点属性通过宏定义了配置信息。]]></description><category></category></item><item><title><![CDATA[基于Zephyr平台nRF Connect SDK在Windows10下开发环境的快速搭建]]></title><link>https://blog.youkuaiyun.com/wayne2018/article/details/128147256</link><guid>https://blog.youkuaiyun.com/wayne2018/article/details/128147256</guid><author>wayne2018</author><pubDate>Fri, 02 Dec 2022 14:53:01 +0800</pubDate><description><![CDATA[1. Nordic开发SDK需要在线搭建，对于网络不太好的，实在是费时费力，该文特点是利用拷贝已经搭建好的一个SDK目录，直接在新的PC平台实现大部分文件的离线安装，安装效率很高。
2. 离线安装的文件数据主要包括两个部分，一个是toolchains，即ncs-toolchain-windows-x86_64-v2.2.0-rc1-20221128T075938-f88d497.tar包含在离线安装包内，另一个是github的代码文件。]]></description><category></category></item><item><title><![CDATA[OS服务——日志——日志]]></title><link>https://blog.youkuaiyun.com/wayne2018/article/details/127564378</link><guid>https://blog.youkuaiyun.com/wayne2018/article/details/127564378</guid><author>wayne2018</author><pubDate>Fri, 28 Oct 2022 07:40:54 +0800</pubDate><description><![CDATA[日志记录API提供了一个通用的接口来处理由开发人员发布的消息。消息通过前端传递，然后由活动的后端进行处理。如果需要，可以使用自定义的前端和后端。]]></description><category></category></item><item><title><![CDATA[OS服务——SMP协议规范——格式化输出]]></title><link>https://blog.youkuaiyun.com/wayne2018/article/details/127564375</link><guid>https://blog.youkuaiyun.com/wayne2018/article/details/127564375</guid><author>wayne2018</author><pubDate>Fri, 28 Oct 2022 07:39:39 +0800</pubDate><description><![CDATA[应用程序以及Zephyr本身都需要基础设施来格式化值以供用户使用。标准的C99库`*printf()`功能满足了对流输出设备或内存缓冲区的需求，但在嵌入式系统中，设备可能不接受流数据，而内存可能无法存储格式化的输出。]]></description><category></category></item><item><title><![CDATA[OS服务——SMP协议规范—— Shell管理]]></title><link>https://blog.youkuaiyun.com/wayne2018/article/details/127564371</link><guid>https://blog.youkuaiyun.com/wayne2018/article/details/127564371</guid><author>wayne2018</author><pubDate>Fri, 28 Oct 2022 07:38:36 +0800</pubDate><description><![CDATA[Shell管理允许使用SMP协议将命令传递给Shell子系统。

命令行管理程序管理组定义了以下命令：
|Command ID|Command description|
| ----- | ----- |
|0|Shell command line execute|]]></description><category></category></item><item><title><![CDATA[OS服务——SMP协议规范——文件管理]]></title><link>https://blog.youkuaiyun.com/wayne2018/article/details/127564368</link><guid>https://blog.youkuaiyun.com/wayne2018/article/details/127564368</guid><author>wayne2018</author><pubDate>Fri, 28 Oct 2022 07:37:39 +0800</pubDate><description><![CDATA[文件管理组提供允许从设备上载和下载文件的命令。

文件管理组定义了以下命令：
|Command ID|Command description|
| ----- | ----- |
|0|File download/upload|
|1|File status|
|2|File hash/checksum|]]></description><category></category></item></channel></rss>