<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[LeoMeEE的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/LeoMeEE</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; LeoMeEE]]></copyright><item><title><![CDATA[不同季节送风温度、季节判断条件、推荐室内温度]]></title><link>https://blog.youkuaiyun.com/LeoMeEE/article/details/146559394</link><guid>https://blog.youkuaiyun.com/LeoMeEE/article/details/146559394</guid><author>LeoMeEE</author><pubDate>Thu, 27 Mar 2025 14:55:51 +0800</pubDate><description><![CDATA[夏季设定通常比冬季高2°C–4°C（如办公楼夏季24°C vs. 冬季20°C），以适应人体对季节变化的自然适应。：人流量大，顾客活动频繁，适当低温可提升舒适感，但需避免过冷（如<22°C）导致冷热交替不适。恒温建筑（如高端写字楼）：可能全年保持22°C±1°C，但需承担更高能耗成本。：每调高1°C，制冷能耗可降低约5%-8%（如从22°C升至24°C）。特殊区域（如数据中心）：温度设定以设备需求为主（如18°C–27°C）。：与夏季接近，保持全年温度稳定（±2°C）有助于提升员工适应性。]]></description><category></category></item><item><title><![CDATA[自动控制消抖方式优劣对比]]></title><link>https://blog.youkuaiyun.com/LeoMeEE/article/details/146313939</link><guid>https://blog.youkuaiyun.com/LeoMeEE/article/details/146313939</guid><author>LeoMeEE</author><pubDate>Mon, 17 Mar 2025 14:15:17 +0800</pubDate><description><![CDATA[延时消抖可以有效避免短暂的干扰或噪声引起的误动作，但可能会引入响应延迟，尤其是在需要快速响应的系统中，这种延迟可能导致系统超调或者调节时间增加。另外，死区控制可能导致系统在死区边界附近出现振荡，如果反馈值在死区边缘来回摆动，可能会引起控制器的反复切换，这时候可能需要结合其他方法。而延时消抖如果在延时期间反馈值持续波动，可能导致延时不断重置，控制动作被持续延迟，影响系统响应。总结来说，两种方法各有优缺点，选择哪种取决于具体应用的需求，比如对精度、响应速度、抗干扰能力的要求，以及系统的动态特性等。]]></description><category></category></item><item><title><![CDATA[STM32G0系列Flash CFGBSY置位问题]]></title><link>https://blog.youkuaiyun.com/LeoMeEE/article/details/137864384</link><guid>https://blog.youkuaiyun.com/LeoMeEE/article/details/137864384</guid><author>LeoMeEE</author><pubDate>Wed, 17 Apr 2024 11:09:08 +0800</pubDate><description><![CDATA[STM32G0系列（我这在G030和G070能复现该问题）开始运行后，即使没有任何Flash操作，Flash外设的SR寄存器的CFGBSY位也会在你操作某个外设（可能是timer也可能是i2c等）后置位，如果不做任何处理，后续如果操作Flash擦除写入，会导致HardFault或者Flash相关Hal函数返回错误。参考网上部分网友的方案，先给Flash不使用的区域写入点儿数据，此时CFGBSY会清零，但是会导致PGAERR和PGSERR置位，之后清除这2个故障位，然后就能正常对Flash进行操作了。]]></description><category></category></item><item><title><![CDATA[增量式PID中的微分项为什么是e(k) - 2e(k-1)+e(k-2)]]></title><link>https://blog.youkuaiyun.com/LeoMeEE/article/details/134207901</link><guid>https://blog.youkuaiyun.com/LeoMeEE/article/details/134207901</guid><author>LeoMeEE</author><pubDate>Fri, 03 Nov 2023 17:47:56 +0800</pubDate><description><![CDATA[说白了就是 这次误差和上次误差的变化量 - 上次误差和上上一次误差的变化量，就是连续三次误差的变化量的变化量，而变化量的变化量就是变化率，就是微分了（积分是变化量，微分是变化率）而增量式PID算法公式中的【e(k) - 2e(k-1)+e(k-2)   这次误差-2*上次误差+上上次误差】似乎不是那么好理解。小学数学知识告诉我们这个式子能写成[e(k) - e(k-1)]-[e(k-1)-e(k-2)]其实这个东西展开就是e(k) - e(k-1)- e(k-1)+e(k-2)]]></description><category></category></item><item><title><![CDATA[对数组使用strstr时的主意事项]]></title><link>https://blog.youkuaiyun.com/LeoMeEE/article/details/130292350</link><guid>https://blog.youkuaiyun.com/LeoMeEE/article/details/130292350</guid><author>LeoMeEE</author><pubDate>Fri, 21 Apr 2023 17:03:12 +0800</pubDate><description><![CDATA[这里strstr的实际执行效果是 在数组a+b+d中找b+d，因为数组a b d在内存中大概率是连在一起的，所以strstr从数组a开始的指针往下找，找到\0（其实就是0）的时候其实查找范围已经超出了abd所在的内存范围，如果运气差点儿，abd数组后面连续很长的一段内存里一个0都没有，那么你的这个strstr就会运行很长时间，直到世界的尽头。但是在实际使用时要注意，如果引入的2个指针确实指向的是字符串，没什么问题，但是如果引入的2个指针指向的是数组，那就有问题了。如果引入的指针是指向数组的。]]></description><category></category></item><item><title><![CDATA[如果写入Flash前不擦除会发生什么]]></title><link>https://blog.youkuaiyun.com/LeoMeEE/article/details/130153721</link><guid>https://blog.youkuaiyun.com/LeoMeEE/article/details/130153721</guid><author>LeoMeEE</author><pubDate>Fri, 14 Apr 2023 15:38:43 +0800</pubDate><description><![CDATA[③第三只小耗子，耗中猛耗，走过了全部8个老鼠夹子，前4个老鼠夹子已经被触发合上了所以没动静，后4个老鼠夹子被触发后，啪啪啪啪，被触发后合上，所以第三只耗子走过后，这8个老鼠夹子变成了“合合合合合合合合”，就是00000000。④然后来了个人类，看到有老鼠夹子被触发合上了，为了下次老鼠夹子能继续抓老鼠，就把老鼠夹子掰开了，而且根据规则，是一次把所有老鼠夹子都掰开了，8个夹子就变成了“张张张张张张张张”，就是11111111，回到了最开始的状态。夹子合上变张开，bit从0变成1；]]></description><category></category></item><item><title><![CDATA[启动文件里的heep_size的设置]]></title><link>https://blog.youkuaiyun.com/LeoMeEE/article/details/121374137</link><guid>https://blog.youkuaiyun.com/LeoMeEE/article/details/121374137</guid><author>LeoMeEE</author><pubDate>Wed, 17 Nov 2021 11:29:50 +0800</pubDate><description><![CDATA[这里主要针对stm32的启动文件里的heep_size

众所周知这个heep_size 是堆的大小的设置，比如stm32f030的默认值是

Heap_Size    EQU   0x00000200

就是说堆大小默认512字节，而堆的话，如果不用操作系统或者C自带的内存管理函数（malloc啊 free啊啥的），其实没多大用

这样好多人包括我自己其实就想这里能不能设置成0得了，可以省出512字节RAM

事实证明，没必要，编译器比我们聪明，看看MDK编译过程中产生的map文件，其中有这么一...]]></description><category></category></item><item><title><![CDATA[const void * 做函数参数的用法]]></title><link>https://blog.youkuaiyun.com/LeoMeEE/article/details/121114249</link><guid>https://blog.youkuaiyun.com/LeoMeEE/article/details/121114249</guid><author>LeoMeEE</author><pubDate>Wed, 03 Nov 2021 09:57:54 +0800</pubDate><description><![CDATA[引子

最近在看sx126x的驱动程序时发现了这么个用法


sx126x_status_t sx126x_set_sleep( const void* context, const sx126x_sleep_cfgs_t cfg )
{
    uint8_t buf[SX126X_SIZE_SET_SLEEP] = { 0 };

    buf[0] = SX126X_SET_SLEEP;

    buf[1] = ( uint8_t ) cfg;

    return ( sx126x_stat]]></description><category></category></item><item><title><![CDATA[关于MSP430的RST引脚的处理方式]]></title><link>https://blog.youkuaiyun.com/LeoMeEE/article/details/113254811</link><guid>https://blog.youkuaiyun.com/LeoMeEE/article/details/113254811</guid><author>LeoMeEE</author><pubDate>Wed, 27 Jan 2021 17:25:32 +0800</pubDate><description><![CDATA[前些天给MSP430G2553的小片子画了个TSSOP的转接板，方便用杜邦线连模块用。

画板子的时候把所有引脚都用2.54的排针引出，想着不会出什么问题，因为N年前在用F5438的时候就是直接用LQFP100的转接板把所有引脚引出来，插上3.3V电源片子就能跑了（对于当时只用过51的我还是很震撼的，毕竟51要跑起来外面要接一大堆东西）。

但是把这个G2553焊上去，连launchpad下程序后，发现程序怎么都不运行，还以为是买到便宜的假片子了。

量了一圈，3.3V电源正常，RST引脚2.5V！这种半高]]></description><category></category></item><item><title><![CDATA[12864 OLED屏幕 的例程永远从第1列而不是第0列开始的问题]]></title><link>https://blog.youkuaiyun.com/LeoMeEE/article/details/84548211</link><guid>https://blog.youkuaiyun.com/LeoMeEE/article/details/84548211</guid><author>LeoMeEE</author><pubDate>Mon, 26 Nov 2018 16:15:04 +0800</pubDate><description><![CDATA[注意，TB上卖的12864，商家会提供例程，最近发现其中一个版本的例程存在问题

显示16*16点阵的字符，一行128像素，正好显示8个。

但是使用商家提供的例程，当你设置从第0行0列显示，每行的字符却都是从第1列开始，而不是从第0列

问题出在下面的代码中


void OLED_Set_Pos(uint8_t Row,uint8_t Cal) 
{ 
	OLED_WR_Byte(0xB0+R...]]></description><category></category></item></channel></rss>