
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
最近,我在写stm32单片机程序,发现stm32的HAL库中写的代码有很多省略写法,我这里说的省略写法不是指HAL库中烧了什么函数的意思,毕竟HAL库的代码水平还是很高的,有很多值得我们学习的地方。我说的省略写法是指在函数内部有些临时栈变量用于接收某个函数的返回值,或者某个中间变量,在编写代码过程中省略了,今天要讨论的是这种省略临时栈变量或者中间变量的写法,什么时候是可以省略的,什么情况是不能省略
VLA(variable length array)可变长度数组之所以在编译阶段(keil MDK直接提示错误)报错就是因此,数组长度在代码运行阶段是由可能导致变动,就算是最初定义了一个初始值,也无法保证在代码运行是不会修改该变量的值,该变量的值如果发生变动,全局数组长度也应该发生变动,这就影响了这个可执行文件的内存布局分布,这是不允许的。运行阶段就是申请2次栈内存,就算函数write_flash
文章摘要:本文探讨了在STM32模块化编程中条件判断结构的选择问题。作者分析了两种主要条件判断方式的适用场景:1) if-elseif-else结构适用于条件互斥的情况(可能多次判断但只执行一个分支);2) 多个独立if结构适用于条件无关联的情况(必定执行全部判断且可能触发多个分支)。文章强调应根据参数条件是否互斥来选择判断结构,并指出两种方式不可混用。最后总结了if语句执行的必然性和else语句
VSCode升级至1.133.0版本后,远程连接功能报错。尝试关闭自动更新回退版本或修改product.json文件均未解决。最终在GitHub社区发现是SSH-Remote插件预发布版本的问题,将其切换为正式发布版本后成功修复远程连接功能。
刚开始,我以为是主题的原因,换了好几种vscode自带主题,都无法解决问题,后来我终于找到原因了:打开头文件后,vscode识别头文件为c++文件,任务栏右下角。因此只需要将识别错误的c++改成“自动检测”,就解决了。而打开的源文件就不存在这样的问题。
本文介绍了在VSCode中实现类似SourceInsight的if条件判断结尾提示功能的方法。作者推荐使用"IfEndMarker"插件,该插件经过反馈后已支持C/C++环境,适用于微软C/C++插件和clangd环境。文章还提到可将提示的最小代码行数从4改为2,以显示简短if判断的提示。最后提供了插件作者的GitHub链接(https://github.com/lacymor
摘要:在VSCode中使用C/C++插件查看STM32代码时遇到语法提示失效问题。研究发现,问题源于插件错误,需先解决"问题"窗口中的错误提示。通过配置c_cpp_properties.json文件,添加Keil MDK的系统头文件路径(而非IAR路径),成功消除错误并使结构体语法提示恢复正常。关键发现:1)语法提示问题与错误提示相关;2)必须使用Keil MDK而非IAR的头
另外就是Debug调试界面进入后,停在了main函数的非第一条代码上,这个问题还没解决,但是不影响代码正常运行,也没有解决。但是在vscode+EIDE环境下,虽然也能无错误编译,但是烧录或者debug调试后,当使用串口调试助手的udp网络通信回显测试时,会进入hardfault的死循环,也就说代码跑飞了。这样设置好了之后,重新“全部编译”并下载,使用串口助手的UDP网络通信就不会进入“hardf
另外就是Debug调试界面进入后,停在了main函数的非第一条代码上,这个问题还没解决,但是不影响代码正常运行,也没有解决。但是在vscode+EIDE环境下,虽然也能无错误编译,但是烧录或者debug调试后,当使用串口调试助手的udp网络通信回显测试时,会进入hardfault的死循环,也就说代码跑飞了。这样设置好了之后,重新“全部编译”并下载,使用串口助手的UDP网络通信就不会进入“hardf
这篇文章分析了代码中多层if-else嵌套带来的可读性问题。作者指出嵌套层级过多会导致逻辑难以追踪,特别是else条件需要反向思考时更增加理解难度。文中通过一个5层嵌套的定时器中断函数示例,说明这种结构相当于多个条件的逻辑与运算,建议采用状态机或实时操作系统来优化。此外,文章还讨论了if-elseif结构没有结尾else的情况,指出虽然编译器允许,但最好添加空else或调试信息以提高规范性。最后作







