<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[LLdalin的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/LLdalin</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; LLdalin]]></copyright><item><title><![CDATA[stm32 lwip client同时稳定收发和自动重连]]></title><link>https://blog.youkuaiyun.com/LLdalin/article/details/162274540</link><guid>https://blog.youkuaiyun.com/LLdalin/article/details/162274540</guid><author>LLdalin</author><pubDate>Wed, 24 Jun 2026 16:03:36 +0800</pubDate><description><![CDATA[本文探讨了在嵌入式系统中使用LwIP实现TCP客户端时面临的一个常见问题：客户端无法自动检测服务器连接状态导致重连机制失效。文章首先介绍了LwIP的Socket接口开发流程，包括建立连接、收发数据等基本操作。随后详细分析了五种实现方案及其问题，重点指出TCP发送(write)和接收(recv)对连接断开检测的灵敏度差异。最终提出了两种有效解决方案：1）创建独立发送线程并结合信号量机制；2）使用select多路复用实现异步收发。文章还建议通过实现心跳机制来完善连接状态检测，为嵌入式工程师提供了实用的LwIP开]]></description><category></category></item><item><title><![CDATA[IAR工程通过修改icf文件链接函数到指定位置]]></title><link>https://blog.youkuaiyun.com/LLdalin/article/details/147154216</link><guid>https://blog.youkuaiyun.com/LLdalin/article/details/147154216</guid><author>LLdalin</author><pubDate>Fri, 11 Apr 2025 21:34:50 +0800</pubDate><description><![CDATA[在嵌入式软件的很多应用场景里面，需要将某些特定的函数放置到特定的位置，正好最近深度学习了一下IAR的分散加载，分享一下。将某些特定的函数放到Flash的特定位置，方便IAP来执行在线升级APP；或者为了保护知识产权将某些核心代码放置到对外不可见的特定ROM中；或者由于代码量的原因需要把代码放置到外部Flash中。将某些特定的函数放到SRAM中执行以提高代码的执行效率，甚至有的MCU为了以更高的效率执行代码还提供了CCRAM（内核耦合RAM）。]]></description><category></category></item><item><title><![CDATA[向心加速度公式的推导]]></title><link>https://blog.youkuaiyun.com/LLdalin/article/details/144579515</link><guid>https://blog.youkuaiyun.com/LLdalin/article/details/144579515</guid><author>LLdalin</author><pubDate>Thu, 19 Dec 2024 11:38:26 +0800</pubDate><description><![CDATA[向心加速度公式的推导可谓“条条大路通罗马”，是一个十分有趣的数学问题，无论是通过三角、向量、解析几何还是极限、微积分等高等数学方法都可以进行求解，在此整理几个最为简便的方法供大家参考。]]></description><category></category></item><item><title><![CDATA[球面面积的积分推导]]></title><link>https://blog.youkuaiyun.com/LLdalin/article/details/144393446</link><guid>https://blog.youkuaiyun.com/LLdalin/article/details/144393446</guid><author>LLdalin</author><pubDate>Wed, 11 Dec 2024 10:47:33 +0800</pubDate><description><![CDATA[想起求球表面积的积分推导，在B站上也看到求表面积的视频，他们都是先求球体体积，再求表面积，我觉得有点绕远求近了，所以我自己写了一点直接球表面积积分的推导，聊以记录。Rad的求取如最后一张图所示，R在α角平面的投影长度为R*sinθ，而轴线上α角平面的扇形区域对应的弧度。取半圆绕行α角度形成的形状S进行研究，取S表面角度为θ的绿色部分进行研究。，由于Rad最大处对应的是赤道上的弧度，南北半对称，取北半进行积分。下面这个图我花了好久时间画的。]]></description><category></category></item><item><title><![CDATA[有完整目录的CM3技术参考手册]]></title><link>https://blog.youkuaiyun.com/LLdalin/article/details/139093333</link><guid>https://blog.youkuaiyun.com/LLdalin/article/details/139093333</guid><author>LLdalin</author><pubDate>Tue, 21 May 2024 15:08:03 +0800</pubDate><description><![CDATA[有完整目录的 CM3计数参考手册，免费提供给大家。]]></description><category></category></item><item><title><![CDATA[可变个数参数（...）的使用]]></title><link>https://blog.youkuaiyun.com/LLdalin/article/details/138812726</link><guid>https://blog.youkuaiyun.com/LLdalin/article/details/138812726</guid><author>LLdalin</author><pubDate>Mon, 13 May 2024 18:08:05 +0800</pubDate><description><![CDATA[必须通过宏va_start进行初始化，使指针指向传入的可变数据的列表，通过va_arg访问列表中的元素，和使用va_end释放列表占用空间。对于某些应用场景，某些函数的功能很相近，但是传入函数的参数个数不一样，使得我们必须使用不同的函数，比如2个数求平均，或者3个数求平均，甚至其他更多参数的情况；2）  va_start：初始化va_list的变量，它是一个宏定义，调用后va_list的变量指针指向传入的可变数据的列表的第一个元素。va_end宏需要一个参数，是一个va_list类型的变量。]]></description><category></category></item><item><title><![CDATA[CM3的SVC获取处理号简析]]></title><link>https://blog.youkuaiyun.com/LLdalin/article/details/136349952</link><guid>https://blog.youkuaiyun.com/LLdalin/article/details/136349952</guid><author>LLdalin</author><pubDate>Wed, 28 Feb 2024 18:34:42 +0800</pubDate><description><![CDATA[因此，当用户程序想要控制特定的硬件时，它就要产生一个SVC异常，然后操作系统提供的SVC异常服务例程得到执行，它再调用相关的操作系统函数，后者完成用户程序请求的服务。第三部：查找当前PC对应的EXC_Code（可执行代码大多存放在Flash中，也可能在其他存储介质中，我以内部Flash为例），此时的PC指向的还是执行SVC指令之后的指令，需要在此基础上往后倒退一个SVC指令的宽度，因为SVC指令是16位的thumb指令，所以在此PC的基础上减2个字节即为SVC指令；该指令需要一个立即数，充当系统调用代号。]]></description><category></category></item><item><title><![CDATA[SWD TurnAround的理解]]></title><link>https://blog.youkuaiyun.com/LLdalin/article/details/136054071</link><guid>https://blog.youkuaiyun.com/LLdalin/article/details/136054071</guid><author>LLdalin</author><pubDate>Tue, 06 Feb 2024 17:59:48 +0800</pubDate><description><![CDATA[时间标签1到8表示Target的采样点，8-9之间是TA段，时间标签9到11是Target的ACK的驱动点，时间标签12标志ACK最后1bit的结束，12-13之间是TA段，因为这是SWD写操作，时间标签13以后的都属于Host驱动IO（在CLK的下降沿驱动），Target在CLK的上升沿采样。那么请看下图，把1CLK细化成4部分（H-F-L-R），时间标签1到8表示Target的采样点，9到11是Target的ACK的驱动点。在周转期间，主机和目标都不驱动线路，线路的状态是未定义的。]]></description><category></category></item><item><title><![CDATA[ARM汇编LSLS指令]]></title><link>https://blog.youkuaiyun.com/LLdalin/article/details/131974789</link><guid>https://blog.youkuaiyun.com/LLdalin/article/details/131974789</guid><author>LLdalin</author><pubDate>Fri, 28 Jul 2023 10:45:56 +0800</pubDate><description><![CDATA[逻辑左移(立即数)将寄存器值左移一个立即位数，并将结果写入目标寄存器。CM3中兼容thumb和ARM指令，为thumb指令（16位）和ARM指令（32位），在CM3中汇编中常用到LSL指令，此指令用于逻辑左移。在“LSLS    R1,R1,#5”这句汇编代码中，意思是将R1寄存器左移 5 位再写回到R1寄存器中。第二种情况下，因为左移5位后，R1= 0x1 0000 0000，导致溢出的那以为正好是1，所以C置位.如果 R1 = 0x8000 0000，执行完上面指令后 R1= 0, xPSR中C为0；]]></description><category></category></item></channel></rss>