<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[nanjoh的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/nanjoh</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; nanjoh]]></copyright><item><title><![CDATA[Git分支管理：从混乱到规范的实战指南]]></title><link>https://blog.youkuaiyun.com/nanjoh/article/details/157907253</link><guid>https://blog.youkuaiyun.com/nanjoh/article/details/157907253</guid><author>nanjoh</author><pubDate>Mon, 09 Feb 2026 16:37:50 +0800</pubDate><description><![CDATA[Git分支管理规范的建立，就像交通规则的制定。它不是为了限制你的自由，而是为了保护每个人都能安全、高效地到达目的地。]]></description><category></category></item><item><title><![CDATA[裸机也能玩转多任务——单片机并行处理的实用技巧]]></title><link>https://blog.youkuaiyun.com/nanjoh/article/details/157515048</link><guid>https://blog.youkuaiyun.com/nanjoh/article/details/157515048</guid><author>nanjoh</author><pubDate>Thu, 29 Jan 2026 19:00:44 +0800</pubDate><description><![CDATA[比如LCD刷新需要50ms，那在这50ms里，其他任务都得干等着。每个任务都有自己的执行周期，系统不断检查"时间到了没"，到了就执行，没到就跳过。解决上面问题的第一步，就是给每个任务加上"时间管理"。：每个函数执行时间不一样，根本没法保证"每100ms读一次温度"很多产品用裸机跑得好好的，没必要为了"高大上"而引入RTOS。上面的写法有个小问题：任务多了，main函数里要写一堆。现在每次调用只执行一小步，立刻返回，不会阻塞其他任务。中断里干太多活，会导致其他中断被延迟，系统响应变差。]]></description><category></category></item><item><title><![CDATA[windows垃圾清理]]></title><link>https://blog.youkuaiyun.com/nanjoh/article/details/155503682</link><guid>https://blog.youkuaiyun.com/nanjoh/article/details/155503682</guid><author>nanjoh</author><pubDate>Tue, 02 Dec 2025 21:45:38 +0800</pubDate><description><![CDATA[1.win+R 打开运行  输入%temp% :这个文件夹里面都是垃圾文件，可以全部选中，按下。2.关闭系统休眠文件，在开始菜单中输入命令提示符，右键点击以管理员省份运行，然后。4.删除临时文件，按下win+i，系统中点击存储，打开临时文件，全部勾选删除。3.改变软件缓存路径：例如微信，在设置里面更改缓存路径。输入powercfg -h off。shift+del全部删除。]]></description><category></category></item><item><title><![CDATA[c++设计模式：抽象工厂模式]]></title><link>https://blog.youkuaiyun.com/nanjoh/article/details/149270783</link><guid>https://blog.youkuaiyun.com/nanjoh/article/details/149270783</guid><author>nanjoh</author><pubDate>Fri, 11 Jul 2025 14:41:17 +0800</pubDate><description><![CDATA[虽然生产的是不同的产品，但是可以二者之间是有微妙的关系的，如参谋所说，技术人员的一些技术经验是可以借鉴的，这就相当于同一个类中的不同对象，之间是可以公用某些资源的。那么，增加一条流水线，扩大厂房，当然是最好的主意了。，我们可能会想到，后期产品会越来越多了，建立的工厂也会越来越多，工厂进行了增长，工厂变的凌乱而难于管理；由于工厂方法模式创建的对象都是继承于Product的，所以工厂方法模式中，每个工厂只能创建单一种类的产品，当需要生产一种全新的产品（不继承自Product）时，发现工厂方法是心有余而力不足。]]></description><category></category></item><item><title><![CDATA[c++设计模式：简单工厂模式]]></title><link>https://blog.youkuaiyun.com/nanjoh/article/details/149269190</link><guid>https://blog.youkuaiyun.com/nanjoh/article/details/149269190</guid><author>nanjoh</author><pubDate>Fri, 11 Jul 2025 11:08:36 +0800</pubDate><description><![CDATA[考虑一个简单的软件应用场景，一个软件系统可以提供多个外观不同的按钮（如圆形按钮、矩形按钮、菱形按钮等）， 这些按钮都源自同一个基类，不过在继承基类后不同的子类修改了部分属性从而使得它们可以呈现不同的外观，如果我们希望在使用这些按钮时，不需要知道这些具体按钮类的名字，只需要知道表示该按钮类的一个参数，并提供一个调用方便的方法，把该参数传入方法即可返回一个相应的按钮对象，此时，工厂模式允许客户端代码根据不同的条件创建不同类型的对象，而无需了解具体类名。]]></description><category></category></item><item><title><![CDATA[lvgl学习笔记--基础对象1]]></title><link>https://blog.youkuaiyun.com/nanjoh/article/details/142465967</link><guid>https://blog.youkuaiyun.com/nanjoh/article/details/142465967</guid><author>nanjoh</author><pubDate>Mon, 23 Sep 2024 19:41:24 +0800</pubDate><description><![CDATA[【代码】lvgl学习笔记--基础对象1。]]></description><category></category></item><item><title><![CDATA[48个国际音标]]></title><link>https://blog.youkuaiyun.com/nanjoh/article/details/107235899</link><guid>https://blog.youkuaiyun.com/nanjoh/article/details/107235899</guid><author>nanjoh</author><pubDate>Thu, 09 Jul 2020 19:22:50 +0800</pubDate><description><![CDATA[48个国标音标：



元音：

1、单元音：[i:]、、[ɔ:]、[ɔ]、[u:]、、[ə:]、[ə]、[ɑ:]、[ʌ]、[e]、[æ]

2、双元音：[ei]、[ai]、[ɔi]、[iə]、[ɛə]、[uə]、[au]、[əu]

辅音：

[p]、、[t]、[d]、[k]、[g]、[f]、[v]、[s]、[z]、[θ]、[ð]、[ʃ]、[ʒ]、[tʃ]、[dʒ]

[tr]、[dr]、[ts]、[dz]、[m]、[n]、[ŋ]、[h]、[l]、[r]、[j]、[w]

英语音标表发音规律记忆口诀：
.]]></description><category></category></item><item><title><![CDATA[STM32F4烧录方法]]></title><link>https://blog.youkuaiyun.com/nanjoh/article/details/99679745</link><guid>https://blog.youkuaiyun.com/nanjoh/article/details/99679745</guid><author>nanjoh</author><pubDate>Fri, 16 Aug 2019 15:49:17 +0800</pubDate><description><![CDATA[https://blog.youkuaiyun.com/qq_24835087/article/details/83751498

点击 j-Flash lite







批处理烧录方式：

1.将jink驱动目录中的JLink.exe 和JLinkARM.exe文件复制到 新建的一键下载文件中



2. 新建jlinkBrunFwFile.txt，内容如下：

device nRF52832...]]></description><category></category></item><item><title><![CDATA[J-Link遇到的问题总结]]></title><link>https://blog.youkuaiyun.com/nanjoh/article/details/95624304</link><guid>https://blog.youkuaiyun.com/nanjoh/article/details/95624304</guid><author>nanjoh</author><pubDate>Fri, 12 Jul 2019 15:50:59 +0800</pubDate><description><![CDATA[1.在使用的过程中，J-Link 指示灯一直闪烁，keil 识别不了J-Link，J-Link驱动安装失败

 解决方式：重启电脑  具体原因未知

2.J-Link被识别了，但是不能使用keil 进行下载 出现如下错误：



1）可以先找 KEIL 的安装路径：C:\Keil_v5\ARM\Segger



2）再找到你的J-Link安装路径：C:\Program Files (x8...]]></description><category></category></item><item><title><![CDATA[FreeRtos 任务优先级和中断优先级]]></title><link>https://blog.youkuaiyun.com/nanjoh/article/details/94395765</link><guid>https://blog.youkuaiyun.com/nanjoh/article/details/94395765</guid><author>nanjoh</author><pubDate>Mon, 01 Jul 2019 17:36:19 +0800</pubDate><description><![CDATA[中断优先级和任务优先级的区别：

     1.简单的说，这两者之间没有任何关系，不管中断的优先级是多少，中断的优先级永远高任何任务的优先级，即在执行的过程中，中断来了就开始执行中断服务程序，

    2.对应STM32F103 F407来说，中断优先级数值越小，优先级就越高，而FreeRTOS的任务优先级是，任务优先级数值越小

任务优先级越低。

任务优先级配置 
...]]></description><category></category></item><item><title><![CDATA[Nordic nRF5 SDK和softdevice 介绍和版本对应  11]]></title><link>https://blog.youkuaiyun.com/nanjoh/article/details/93487728</link><guid>https://blog.youkuaiyun.com/nanjoh/article/details/93487728</guid><author>nanjoh</author><pubDate>Mon, 24 Jun 2019 17:05:51 +0800</pubDate><description><![CDATA[https://www.cnblogs.com/iini/p/9095551.html

SDK和Softdevice 的区别，怎么选择SDK和Softdevice版本及版本兼容问题

Nordic目前有2套完全独立的SDK：nRF SDK和nRF Connect SDK,一般来说，开发板nRF51/52推荐使用nRF5 SDK，开发nRF91/nRF53等新产品推荐使用nRF connect S...]]></description><category></category></item><item><title><![CDATA[Nodic 52832 擦除Flash 及Flash空间分配 2]]></title><link>https://blog.youkuaiyun.com/nanjoh/article/details/91439108</link><guid>https://blog.youkuaiyun.com/nanjoh/article/details/91439108</guid><author>nanjoh</author><pubDate>Tue, 11 Jun 2019 15:32:30 +0800</pubDate><description><![CDATA[点击jlink 中的J-Flash Lite 对整个芯片进行操作



以上对整个芯片进行擦除操作

应用程序Flash 地址分析：



52832_AA总的Flash空间为512K, RA为64k,协议栈占用的空间 Rom大小为152k，Ram大小10k,

应用程序Rom开始地址0x26000(152k), 大小0x5A000(360k),RAM开始地址0x2B90(10k),大小0xD4...]]></description><category></category></item><item><title><![CDATA[c#上位机开发3]]></title><link>https://blog.youkuaiyun.com/nanjoh/article/details/82992767</link><guid>https://blog.youkuaiyun.com/nanjoh/article/details/82992767</guid><author>nanjoh</author><pubDate>Wed, 10 Oct 2018 10:27:39 +0800</pubDate><description><![CDATA[从.NET Framework 2.0开始，C#提供了SerialPort类用于实现串口控制。命名空间:System.IO.Ports。其中详细成员介绍参看MSDN文档。下面介绍其常用的字段、方法和事件。

  1. 常用字段：

名称
			说明
		PortName
			获取或设置通信端口
		BaudRate
			获取或设置串行波特率
		DataBits
			获取或设置每个字节的标准...]]></description><category></category></item><item><title><![CDATA[c#上位机开发2]]></title><link>https://blog.youkuaiyun.com/nanjoh/article/details/82992405</link><guid>https://blog.youkuaiyun.com/nanjoh/article/details/82992405</guid><author>nanjoh</author><pubDate>Wed, 10 Oct 2018 10:07:45 +0800</pubDate><description><![CDATA[上一篇简单介绍了C#的一些基本知识，并成功的Hello，World，那么从这篇开始，我们来自己动手写一个串口助手：

1、构思功能

　　串口助手在单片机开发中经常被用来调试，最基本的功能就是接收功能和发送功能，其次，串口在打开前需要进行一些设置：串口列表选择、波特率、数据位、校验位、停止位，这样就有了一个基本的雏形；然后我们在下一篇中在此功能上添加：ASCII/HEX显示，发送，发送新行功能，重...]]></description><category></category></item><item><title><![CDATA[c#上位机开发1]]></title><link>https://blog.youkuaiyun.com/nanjoh/article/details/82965735</link><guid>https://blog.youkuaiyun.com/nanjoh/article/details/82965735</guid><author>nanjoh</author><pubDate>Mon, 08 Oct 2018 11:32:36 +0800</pubDate><description><![CDATA[本文来自https://www.cnblogs.com/Mculover666/p/9126191.html

1、新建C#项目工程

　　　首先选择新建Windows窗体应用(.NET Framework)，然后选择项目保存位置，填写项目名称，这里因为我们不需要用git进行版本管理，所以不用新建GIT存储库；

　　 框架是指.net框架，4以及4以下的.NET框架可以在xp上运行，4以上可以在...]]></description><category></category></item><item><title><![CDATA[Push-Pull推挽输出和Open-Drain开漏输出]]></title><link>https://blog.youkuaiyun.com/nanjoh/article/details/58072651</link><guid>https://blog.youkuaiyun.com/nanjoh/article/details/58072651</guid><author>nanjoh</author><pubDate>Mon, 27 Feb 2017 14:35:46 +0800</pubDate><description><![CDATA[【Push-Pull推挽输出】

原理：

输出的器件是指输出脚内部集成有一对互补的MOSFET，当Q1导通、Q2截止时输出高电平；而当Q1截止导通、Q2导通时输出低电平。Push-Pull输出，实际上内部是用了两个晶体管（transistor），此处分别称为Top-Transistor和Bottom-Transistor。通过开关对应的晶体管，输出对应的电平。Top-Transistor]]></description><category></category></item><item><title><![CDATA[stm32NVIC中断优先管理]]></title><link>https://blog.youkuaiyun.com/nanjoh/article/details/54582628</link><guid>https://blog.youkuaiyun.com/nanjoh/article/details/54582628</guid><author>nanjoh</author><pubDate>Tue, 17 Jan 2017 14:42:32 +0800</pubDate><description><![CDATA[这里简单介绍一下STM32的中断分组：STM32 将中断分为5个组，组为0~4，该分组的设置是由SCB->AIRCR寄存器的bit10~8,来定义的，具体分配关系表如下：


 第0组 ：所有4位用于指定响应优先级
第1组：最高1位用于指定抢占优先级，最低3位用于指定响应优先级
第2组：最高2位用于指定抢占优先级，最低两位用于指定响应优先级
第3组：最高3位用于指定抢占优先级，最低1位]]></description><category></category></item><item><title><![CDATA[stm32 boot0 boot1的启动方式]]></title><link>https://blog.youkuaiyun.com/nanjoh/article/details/54427240</link><guid>https://blog.youkuaiyun.com/nanjoh/article/details/54427240</guid><author>nanjoh</author><pubDate>Sat, 14 Jan 2017 16:54:16 +0800</pubDate><description><![CDATA[STM32 三种启动模式对应的存储介质君是芯片内置的，它们是：
 1.用户闪存 =芯片内置的Flash 
 2.SRAM=芯片内置的RAM区，就是内存了。
 3.系统存储器=芯片内部一块特定的区域，芯片出厂时在这个区域预置了一段bootloader,就是同事的ISP升级程序，这个
   区域的内容在芯片出现后没偶人能够修改或拆除，即它是一个ROM;
在每个STM32 的芯片上都有两个管脚]]></description><category></category></item><item><title><![CDATA[static 全局变量  全局变量 静态局部变量 局部变量  静态函数  普通函数 之间的区别]]></title><link>https://blog.youkuaiyun.com/nanjoh/article/details/54425564</link><guid>https://blog.youkuaiyun.com/nanjoh/article/details/54425564</guid><author>nanjoh</author><pubDate>Sat, 14 Jan 2017 11:04:41 +0800</pubDate><description><![CDATA[全局变量本身就是静态存储方式，静态全局变量也是静态存储方式，全部变量的作用域是整个源程序，static 全局变量指限定了定义该变量的源文件内有效
在同一原程序的其它源文件不能使用它， static全局变量只初始化一次，防止在其它文件单元被引用；


    把局部变量改变为静态局部变量后是改变了它的存储方式即改变了它的生存期，局部变量在栈中，static局部变量在静态存储区，静态局部变量只]]></description><category></category></item><item><title><![CDATA[结构体大小sizeof的理解]]></title><link>https://blog.youkuaiyun.com/nanjoh/article/details/54410778</link><guid>https://blog.youkuaiyun.com/nanjoh/article/details/54410778</guid><author>nanjoh</author><pubDate>Sat, 14 Jan 2017 10:31:12 +0800</pubDate><description><![CDATA[在32位编译环境中 sizeof的用法


  sizeof（char）     1
  sizeof (int)              4
  sizeof(unsigned int)  4
   sizeof(long int)          4
    sizeof(short int)        2
   sizeof(float)]]></description><category></category></item></channel></rss>