<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[走错路的程序员]]></title><description><![CDATA[记录日常心得]]></description><link>https://blog.csdn.net/phker</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; phker]]></copyright><item><title><![CDATA[C语言单片机与C#上位机之间传递大量参数比较好的实践方案]]></title><link>https://blog.csdn.net/phker/article/details/155917668</link><guid>https://blog.csdn.net/phker/article/details/155917668</guid><author>phker</author><pubDate>Sun, 14 Dec 2025 21:19:50 +0800</pubDate><description><![CDATA[本文总结了嵌入式系统中结构体数据处理的几个关键要点：1) 结构体4字节对齐问题，建议使用4字节类型(float/uint32)避免对齐问题；2) 数据传输建议采用一次性大块发送，参数过多时改为小包发送；3) DMA发送需注意4字节对齐，可通过填充字节解决；4) 大结构体应使用静态或全局变量防止栈溢出；5) 使用参数映射表维护协议两端的变量一致性，通过offset实现动态访问。文中提供了详细的代码示例，包括结构体定义、参数映射表实现和数据处理方法，特别强调了字节对齐和内存管理的重要性。这些实践方法可有效提高嵌]]></description><category></category></item><item><title><![CDATA[C语言中大数组应该放全局变量还是局部变量?]]></title><link>https://blog.csdn.net/phker/article/details/155394245</link><guid>https://blog.csdn.net/phker/article/details/155394245</guid><author>phker</author><pubDate>Sat, 29 Nov 2025 19:58:36 +0800</pubDate><description><![CDATA[研究了半天,  想通过keill的 access 访问断点. 进行监控,  后来发现, 无法添加.  . 于是百度,所以大数组, 最好用全局变量定义. 在函数内部的局部变量. 尽量是简单类型. 不要定义大数组.否则程序跑飞不可控.后来经过跟踪监控分析发现单片机中发送用的buffer数组, 中的数据竟然会不断的变化.接收计算CRC, 然后才发现. CRC竟然不一样. 奇怪了. 这是为啥?奇怪了, 这个数组只有一个函数在用, 而且这个函数是在函数内定义的.后来发现函数内定义的变量有可能会被其它程序随便修改.]]></description><category></category></item><item><title><![CDATA[C语言中哪些常见的坑]]></title><link>https://blog.csdn.net/phker/article/details/150780911</link><guid>https://blog.csdn.net/phker/article/details/150780911</guid><author>phker</author><pubDate>Mon, 25 Aug 2025 21:06:33 +0800</pubDate><description><![CDATA[C语言编程中常见的崩溃性错误主要集中在内存管理、指针操作和语法细节等方面，以下是具体案例及解决方案：内存管理错误。]]></description><category></category></item><item><title><![CDATA[stm32串口接收不定长数据包使用DMA最好的方式]]></title><link>https://blog.csdn.net/phker/article/details/148810953</link><guid>https://blog.csdn.net/phker/article/details/148810953</guid><author>phker</author><pubDate>Sat, 21 Jun 2025 15:32:19 +0800</pubDate><description><![CDATA[摘要：本文介绍了STM32使用DMA双缓冲接收串口不定长数据包的实现方法。通过配置两个缓冲区交替接收，配合空闲中断处理机制，有效解决了传统串口中断接收可能造成的数据丢失问题。具体实现包括DMA缓冲区切换、数据包解析（以0x48/0x54开头、0x2F结尾为标志），以及CRC校验处理。文中提供了完整的数据包结构定义和DMA回调处理流程，确保了数据接收的可靠性和高效性。相比传统中断接收方式，该方法显著提升了数据吞吐量和系统稳定性。]]></description><category></category></item><item><title><![CDATA[keil 单步调试会乱跳]]></title><link>https://blog.csdn.net/phker/article/details/148810876</link><guid>https://blog.csdn.net/phker/article/details/148810876</guid><author>phker</author><pubDate>Sat, 21 Jun 2025 15:22:00 +0800</pubDate><description><![CDATA[Debug → Settings → Trace → 勾选 ​​“During Step, ignore interrupts”​​（部分Keil版本路径略有不同）。在 ​Debug 选项卡​ → ​Settings​ → ​Reset​ 中勾选 ​​“Reset and Run”​，确保调试器在下载代码后复位CPU。更新 ​调试器固件​（如ST-Link Utility）和 ​芯片支持包​（Device Family Pack）。核心关注点：​编译器设置、中断屏蔽、堆栈大小、硬件稳定性。]]></description><category></category></item><item><title><![CDATA[STM32 CAN CANAerospace]]></title><link>https://blog.csdn.net/phker/article/details/148146654</link><guid>https://blog.csdn.net/phker/article/details/148146654</guid><author>phker</author><pubDate>Thu, 22 May 2025 18:09:36 +0800</pubDate><description><![CDATA[00000011         000.000.000          Event           总线错误        DATA    STANDARD    8      接收过程错误-其它错误-允许的显性位。STM32的CAN模块对接CANAerospace 刚开始报错如下.设备开机后整个CAN消息就不发了.  USB_CAN调试器报错如下.具体原因不知道是啥原因, 后来改了一个配置就好了。]]></description><category></category></item><item><title><![CDATA[stm32的串口和dma以及中断.想说爱你不容易]]></title><link>https://blog.csdn.net/phker/article/details/148146631</link><guid>https://blog.csdn.net/phker/article/details/148146631</guid><author>phker</author><pubDate>Thu, 22 May 2025 18:04:25 +0800</pubDate><description><![CDATA[命令通信模式下,  如果不太注重每个命令都收到, (一遍是发送方会重复一直发命令)  这种模式下.建议用串口空闲中断加DMA搬运.  这种情况下. 当串口空闲时(一般是一个命令发送完会空闲一会.) 这个时候从DMA中取到所有的字符命令, 然后解析.  此时的DMA搬运模式建议是手动模式, 只搬运1次, 搬运满所有的缓存后就停止搬运, 在命令处理完之后再开启DMA搬运下一个.  此时的DMA不要开启任何中断.串口接收数据, 用DMA搬运数据, 而且想在串口接收遇到空闲的时候读取DMA接收到的数据.]]></description><category></category></item><item><title><![CDATA[stm32的串口和dma以及中断.想说爱你不容易]]></title><link>https://blog.csdn.net/phker/article/details/148010779</link><guid>https://blog.csdn.net/phker/article/details/148010779</guid><author>phker</author><pubDate>Fri, 16 May 2025 16:27:07 +0800</pubDate><description><![CDATA[命令通信模式下,  如果不太注重每个命令都收到, (一遍是发送方会重复一直发命令)  这种模式下.建议用串口空闲中断加DMA搬运.  这种情况下. 当串口空闲时(一般是一个命令发送完会空闲一会.) 这个时候从DMA中取到所有的字符命令, 然后解析.  此时的DMA搬运模式建议是手动模式, 只搬运1次, 搬运满所有的缓存后就停止搬运, 在命令处理完之后再开启DMA搬运下一个.  此时的DMA不要开启任何中断.串口接收数据, 用DMA搬运数据, 而且想在串口接收遇到空闲的时候读取DMA接收到的数据.]]></description><category></category></item><item><title><![CDATA[stm32测频率占空比最好的方案]]></title><link>https://blog.csdn.net/phker/article/details/147873629</link><guid>https://blog.csdn.net/phker/article/details/147873629</guid><author>phker</author><pubDate>Sun, 11 May 2025 16:21:52 +0800</pubDate><description><![CDATA[本文介绍了一种在单片机工业应用中检测1MHz以下频率的高效方案。该方案利用定时器的混合通道模式，通过捕获上升沿和下降沿的定时器计数器数值，实现频率和占空比的测量。其主要优点包括不占用过多CPU资源、纯硬件计算、无需中断函数以及简单配置。文中提供了详细的代码实现和硬件电路参考，强调了Slave Model Controller必须设置为Reset Mode以确保计数器在每个周期结束后清零。该方案在3000Hz频率下的测量偏差约为3Hz，且通过提高定时器时钟频率可能进一步提升精度。]]></description><category></category></item><item><title><![CDATA[mysql备份和恢复]]></title><link>https://blog.csdn.net/phker/article/details/145508554</link><guid>https://blog.csdn.net/phker/article/details/145508554</guid><author>phker</author><pubDate>Sat, 08 Feb 2025 09:38:11 +0800</pubDate><description><![CDATA[恢复文件时记得要先修改命令行窗口的编码.写的比较全的文章参考,]]></description><category></category></item><item><title><![CDATA[html表格table导出excel,主从表格式,带样式.自动分列]]></title><link>https://blog.csdn.net/phker/article/details/144969321</link><guid>https://blog.csdn.net/phker/article/details/144969321</guid><author>phker</author><pubDate>Mon, 06 Jan 2025 18:15:38 +0800</pubDate><description><![CDATA[html的table导出成excel, vue模板项目使用xlsx-js-style源代码从https://github.com/gitbrent/xlsx-js-style/releases/tag/v1.2.0 下载用里面的dist目录下的文件即可. 复制到vue项目的public目录下的XLSX目录下.在index.hml中引入js脚本,  为啥要在这里引入?]]></description><category></category></item><item><title><![CDATA[vivado项目迁移到2024.2过程日志]]></title><link>https://blog.csdn.net/phker/article/details/144818762</link><guid>https://blog.csdn.net/phker/article/details/144818762</guid><author>phker</author><pubDate>Mon, 30 Dec 2024 11:26:27 +0800</pubDate><description><![CDATA[项目代码主要分2部分, 一个是fpga, PL部分和PS部分.]]></description><category></category></item><item><title><![CDATA[zynq调试还是的用SystemDebuger不要用GDB]]></title><link>https://blog.csdn.net/phker/article/details/143952589</link><guid>https://blog.csdn.net/phker/article/details/143952589</guid><author>phker</author><pubDate>Thu, 21 Nov 2024 19:09:44 +0800</pubDate><description><![CDATA[SystemDebugger可以看到更深的调用堆栈, 而GDB则只能看一部分的调用堆栈.  这将会是一个致命的问题.]]></description><category></category></item><item><title><![CDATA[zynq7020 PrefetchAbort,DataAbort,UndefinedException,ExceptionNull异常的解决方案]]></title><link>https://blog.csdn.net/phker/article/details/143878131</link><guid>https://blog.csdn.net/phker/article/details/143878131</guid><author>phker</author><pubDate>Tue, 19 Nov 2024 16:58:31 +0800</pubDate><description><![CDATA[Xil_DataAbortHandler,
Xil_PrefetchAbort上面这几个异常的问题都可以用我这个方法解决 .请允许我将这篇文章设置为vip可见了, 最近创业手头紧张. 需要恰饭. 各位见谅. 本文绝对值得你花点钱看.  上面的这4种异常的处理,在zynq裸机开中,如果排查需要耗费大量的时间.  采用本文的方法绝对能节省你大量的时间.首先必须得理解 Prefetch Abort 异常是什么异常.  这种异常是如何引起的.在Zynq中，Prefetch Abort异常是一种与指令预取相关的异常。]]></description><category></category></item><item><title><![CDATA[xlinx sdk在window上写普通的c/c++程序]]></title><link>https://blog.csdn.net/phker/article/details/143616164</link><guid>https://blog.csdn.net/phker/article/details/143616164</guid><author>phker</author><pubDate>Fri, 08 Nov 2024 10:53:06 +0800</pubDate><description><![CDATA[经过测试生成文件没问题, 可以运行.  但是好像不能调试.  感觉不如下载一个eclipse 来的方便 如果只是用来写个简单的小程序验证一下, 可以考虑使用这个. 临时用用.然后右击项目进行build.得到一个exe文件.]]></description><category></category></item><item><title><![CDATA[C语言野指针]]></title><link>https://blog.csdn.net/phker/article/details/143587319</link><guid>https://blog.csdn.net/phker/article/details/143587319</guid><author>phker</author><pubDate>Thu, 07 Nov 2024 10:19:12 +0800</pubDate><description><![CDATA[C语言在malloc() 分配到新内存后, 必须对新分配的内容进行初始化, 否则会出现野指针问题.  不然free()的时候会让你左右为难.]]></description><category></category></item><item><title><![CDATA[ZYNQ7020使用IIC协议读写IO扩展芯片PCF8575]]></title><link>https://blog.csdn.net/phker/article/details/143479596</link><guid>https://blog.csdn.net/phker/article/details/143479596</guid><author>phker</author><pubDate>Mon, 04 Nov 2024 11:21:39 +0800</pubDate><description><![CDATA[亲测正常, 注意IIC的地址, 有的从0x20开始的, 有的是0x40开始的.IO扩展是个好东西,  占用资源少. 适合用在响应要求不高的场合.PCF8575最大的好处是有个中断反馈引脚, 方便读取状态.Vivado中的配置.]]></description><category></category></item><item><title><![CDATA[vscode设置特定扩展名文件的打开编码格式]]></title><link>https://blog.csdn.net/phker/article/details/142981065</link><guid>https://blog.csdn.net/phker/article/details/142981065</guid><author>phker</author><pubDate>Wed, 16 Oct 2024 14:32:06 +0800</pubDate><description><![CDATA[默认只能是gb2312, 与我们国内奉行的统一 utf8 不一致. 所以只能是更改特殊文件的打开方式. 配置方式如下.用vscode 编辑c语言或者Verilog代码, 由于其它开发工具的文件编码格式。]]></description><category></category></item><item><title><![CDATA[从纯技术角度对推理引擎工作原理的详细讲解]]></title><link>https://blog.csdn.net/phker/article/details/142941068</link><guid>https://blog.csdn.net/phker/article/details/142941068</guid><author>phker</author><pubDate>Tue, 15 Oct 2024 11:19:43 +0800</pubDate><description><![CDATA[推理引擎是人工智能系统的核心组件，它基于一系列规则和事实，通过模式匹配、冲突解决等机制，自动推导出新的结论或执行相应的动作。推理引擎广泛应用于专家系统、自然语言处理、机器学习等领域，是实现智能化决策的关键技术之一。]]></description><category></category></item><item><title><![CDATA[zynq中异常处理函数XScuGic_DeviceInterruptHandler与XScuGic_InterruptHandler区别]]></title><link>https://blog.csdn.net/phker/article/details/142894186</link><guid>https://blog.csdn.net/phker/article/details/142894186</guid><author>phker</author><pubDate>Sun, 13 Oct 2024 11:26:06 +0800</pubDate><description><![CDATA[其它的代码, 功能是一模一样的,  (虽然一个是XScuGic_CPUReadReg,一个是XScuGic_ReadReg), 但是从功能上来讲是一模一样的, 由此可知.  这两个函数就是同一个函数的重构.有的异常是注册的XScuGic_InterruptHandler处理函数 , 有的地方需要注册XScuGic_DeviceInterruptHandler处理函数.很明显XIL_EXCEPTION_ID_IRQ_INT 就是等价的. XIL_EXCEPTION_ID_IRQ_INT。]]></description><category></category></item></channel></rss>