- 博客(67)
- 收藏
- 关注
原创 结构体定义嵌套定义
对于不熟悉这种嵌套结构体的开发者来说,可能会对代码的理解产生困难。例如,他们可能会误以为 WCH 和 RCH 是独立的结构体,而不是嵌套在 AD4858_IOMap_TypeDef 中的字段。不必要在外部定义其他的结构体声明,更符合面向对象的设计思想。这种初始化方式会导致编译错误。在C语言中,嵌套结构体不能直接初始化。缺点:增加编译器负担。
2025-05-28 18:59:33
143
原创 哪里买正版元器件?
在寻找芯片一级供应商时,贸泽和e络盟是可靠的选择,尤其是贸泽,尽管价格较高,但其器件种类齐全,特别适合研发使用。对于调试工具如J-LINK,建议购买正版,因为盗版产品使用正版驱动时可能会遇到效率问题。对于初学者,建议在嘉立创购买,避免在淘宝上购买,因为淘宝上假货较多,特别是STM32C8T6和功放芯片等产品。
2025-05-16 17:06:12
96
原创 vscode与keil的乱码不兼容问题
自动识别也可以设置识别优先级,把GB2312和UTF8排在自动识别序列前面(因为keil默认就是GB2312)在暂存更改的时候,不要把vscode的设置给暂存了,因为vscode的设置里面有自动转化编码格式。或者先把代码暂存提交,然后再咱才能提交vscodfe json配置文件,这样不会乱码。先提交json配置文件。这样就相当于配置生效,如果暂存效果相当于放弃当前配置。中文注释的话,打开vscode的自动识别格式,如下。
2025-05-08 11:46:37
718
原创 protothread协程库实现非阻塞延时(无操作系统)
这个协程库是根据行号来进行跳转的,struct pt里面只有一个short类型变量用来存 当前行号,具体代码如下,加sleep 1 是为了观察实验现象,项目里不加延时。只需要下面三个头文件即可实现非阻塞延时。
2025-04-25 14:34:36
322
原创 单片机使用printf,不用微库
由于MicroLIB对是缺省 C 库的备选库,它是为了配合实现要装入到极少量内存中的深层嵌入式应用程序而存在的,而这种使用场合下,多数是没有操作系统的,故它删除了与操作系统有关的函数,并且不符合 ISO C 库标准, 不支持某些 ISO 特性;原文链接:https://blog.csdn.net/sarsscofy/article/details/122395372。// 加入以下代码,以支持printf函数,而不需要选择use MicroLIB;//定义_sys_exit()以避免使用半主机模式。
2025-04-02 13:38:36
404
原创 串口/其他接收的回调函数流程
回调函数加链表而已,没啥高大上的,链表的每个节点是一个结构体,这个结构体有命令id,该命令的执行函数指针,下一个节点的地址等。如果串口或者其他收到消息id,就在此链表查询id是否匹配,也就是查链表,如果匹配则执行该id的函数指针。注册回调就是把这个函数指针加到此链表里面。
2025-03-31 10:53:10
104
原创 keil的代码美化工具AStyle3.1
F:\Software\keil break\MDK\there mdk\AStyle\astyle.exe 这个写exe所在的文件路径就行,不用和我一样。工具就是AStyle,但是现在官网发的安装包不好用,我之前用的版本挺好的。
2025-03-29 19:27:40
210
原创 关于AURIX在debug时elf文件丢失无法调试
在TriCore Debug (TASKING)文件夹下发现elf莫名其妙没有了,导致编译和调试均无法进行。解决办法右键工程,clean工程,然后再次编译即可。
2025-02-14 16:49:44
225
原创 AURIX相关安装调试问题_持续更新
这是安装aurix他自己弹出的安装DAS驱动,确认安装。安装aurix他会自己安装DAS,不需要自己再安装。或者去百度网盘获取,或者私我(有偿提供-5米)。创建AURIX项目,选择芯片,finsh即可。安装包需要去官方申请(很麻烦)oneeye依赖性要打勾。AURIX安装与配置。
2025-02-13 10:08:48
292
原创 keil已有项目改工程名
如果有现成的工程(往往都会有现成的工程),只需要稍微修改工程信息,借助这个基础工程会节省很大的开发周期;说明下如何简单快速的修改工程。
2024-12-22 20:35:09
253
原创 vscode通过ssh连接虚拟机进行开发
1.VSCODE安装扩展Tabnine(AI代码补全),Remote Development。在网上看SSH协议其实像加密的TCP协议(传输层协议),用于进程间通信。连接上就去ubuntu上建立vscode的工作区,把不需要的文件夹去掉。虚拟机自带的vscode很卡而且画质感觉不行,所以用这种方法解决。SSH还可以用下面这个软件去映射linux的文件。配置vscode的ssh config。host和name都可以通过命令查询。开启ubuntu的SSH服务。也可以在当前终端写命令。
2024-12-05 19:39:00
669
原创 面向对象思想和面向过程思想分析
所以崽这个类的实例是大学生和小学生,大学生和小学生是不同的对象,他们的写作业的方法不一样,但是写代码的时候只需要调用写作业这个方法就行了。面向过程需要的参数很多,面向对象需要的参数就是对象(类的实例-结构体),这样后续需要加某些属性,比如洗衣机的容量,直接在对象的定义处添加即可,不需再在函数的定义上添加。继承:就是定义类的时候,继承父类的属性,减少代码冗余,比如大学生和小学生都是学生,他们有学生的共同属性(如学号、班级等),这时候继承父类(学生)即可,不需要重复 定义。面向对象,这样看着更清晰。
2024-10-27 17:20:51
337
原创 嵌入式栈溢出怎么办?
在写文件的时候,因为把FATFS这些数据结构定义在了函数里,所以栈溢出了,我把比较大的数据结构放在全局变量上,就没事了.目前仅测试阶段,也可以放在堆里.不用的时候释放掉,减少耦合度.或者加static.
2024-09-13 15:52:23
279
原创 串口接收不到数据之电阻虚焊bug分析思路
单片机和EC移远通信模块进行通信,相同的代码运行在相同的硬件上,但是一个能联网,一个因为没有EC的应答连不上网。说要不响不代表两个模块的串口引脚没有连接,实测,YF08E的左侧和EC模块是通的,蜂鸣档响。YF08E的右侧和单片机是通的。检查单片机的连线发现,EC模块和单片机之中间夹着8位移位器YF08E,看了下他的作用。排除情况2,因为在EC模块上电的时候,能收到EC的准备命令RDY。这里飞线可以正常同学排查EC模块本身问题,用万用表的蜂鸣器档测。发现EC的接受引脚和单片机的引脚没有蜂鸣器响的声音。
2024-09-11 19:55:38
693
原创 程序员如何写笔记并整理资料?
这样就能看到XYD期间的更改,从而一步步进行审查,可以拒绝更改过允许更改。全部检查完毕,就可以把XYD期间这份word删除掉,保持word最新唯一性。存在自己的固态硬盘,确保自己的固态硬盘只存最新的。当然有钱直接开个腾讯文档会员小200块一年,也是可以的。没错,我也看了网上一大堆软件,还有git管理等等。个人认为如果笔记只是记录个人的经验积累,一个word就够了,那些notepad,laTex个人觉得不够简练。3.word自带的审阅功能,能帮助自己进行笔迹版本管理。
2024-09-08 19:28:12
2182
5
原创 Keil下载烧录程序到单片机提示flash outtime超时
3.有外部看门狗,外部看门狗用跳帽屏蔽了再下载,要用跳线帽短接外部看门狗,不要用杜邦线,之前试过杜邦线有时候不行,阻挡不住外部看门狗复位,跳线帽可以。2.RESET按键按一下再下载(或者一直按着下载),这样能让单片机进入烧录模式。
2024-09-05 09:26:06
900
原创 C语言接口
现在手里有一个pcf8563的RTC模块,之前同事写的不完整,功能有问题。但是也不是全部代码都要推翻的。比如可以利用里面的iic等功能函数。网上找了个demo,但是里面的函数名和同事的函数名都不一样,但是有的函数功能 是一样的。这时候可以用接口把两者缝合起来。接口:说白就是结构体+函数指针。接口可以减少耦合,模块化。
2024-09-04 17:04:21
472
原创 Git+word记笔记
程序员记笔记主要同步很重要,我这个方法只支持个人笔记,如果团队还是用企业微信开个企业会员比较方便。为什么用word,因为可以镶嵌代码和文档,不仅仅是文字,兼容性强。语雀,云笔记这些对于上传的word都是有限制的,10MB左右。公司网上gitee太卡了,回家在写。去gitee建仓库。然后添加公钥,SSH。
2024-09-04 13:58:57
405
原创 关于keil程序无法进入main函数问题
上面这么多其实就是想全擦然后分别写入程序和bootloader进单片机flash。到此,bootloader和代码都烧写好了,把擦除全片改为擦除扇区(否则再次烧写会把bootloader冲掉)3.编译完烧写在单片机上,这一步相当于冲掉了bootloader,只下载了程序进入单片机的flash。1.把单片机的芯片上的数据全擦了(bootloader+代码数据)情况:之前烧写没问题,不然再次烧写的稍后显示boot损坏。不会烧写bootloader的看这个。断点都取消掉,编译下载进去。然后勾选下面这两个框。
2024-08-07 11:02:41
1283
1
原创 liteos定时器回调时间过长造成死机问题解决思路
因为定时器的回调函数其实都是存在定时器回调队列里面的,如果一个回调过长,在实时性操作系统里会紊乱系统,加上屎山代码,就会死机。原代码是稳定的,现我实现EMQ平台断开连接的时候,把HSL的模拟点位数据采集到网关,然后存入Flash,当EMQ平台连接的时候,把Flash里面的点位数据放在消息队列里面,不影响实时采集。OK,不要动不动在回调函数写耗时操作,一两次可能没问题,但是一直进行回调的话,会造成奇怪的紊乱。最后的日志,然后就一直在进行度队列操作,队列ID是垃圾值。2.队列的id存的地方被覆盖了。
2024-07-25 19:46:27
476
原创 插入删除单链表指定结点-偷天换日法
同理前插法也用了偷天换日法。就是插入在p前的话,我直接就插到p上面,后面再copy一个p即可了。王道说下面的代码有BUG,比如当删除的结点p在最后一个元素时,p->next=NULL;q->data就是错误的,我认为加个判断就行。
2024-06-11 22:51:30
323
原创 数据结构与算法题目集(中文) 6-4 链式表的按序号查找
简单,没啥讲的int i = 0;int a = 0;if(K<=0)while(K–)if(!L)a=L->Data;L=L->Next;return a;
2024-06-11 14:32:38
128
原创 数据结构与算法题目集(中文) 6-3 求链表的表长
该代码使用循环遍历链表来计算链表的长度。代码首先定义了一个整数变量。while(NULL)相当于while(0)来遍历链表中的每一个节点,并将计数变量。用于计数,并初始化为0。
2024-06-11 14:02:23
391
原创 串口接收第一个字节接收不到
我在第一个字节收到后加了一个字节的延时(用标志位控制)。注意不能加太久延时,否则空闲中断发生,挥着中断时间溢出后面的字节都收不到了。看了网上说的,我一次只发一个字节不会出现这种情况,发多个字节全速运行就会出现这样情况,于是我怀疑是全速运行的锅。全速运行第一个字节就没有了。但是把接受的数据再发出来,发现第一个字节到了最后一个字节。我发 5 1 2 3 他接受的是1 2 3 5。我是115200的波特率,加了8us。
2024-04-17 09:34:33
624
原创 IAR跳转到别的目录的源文件了
解决方法2:把那个 ignore standard include directories 勾选了。V4的程序点击变量的引用处,项目出现了V3的源文件,V4没有。解决方法1:使用绝对路径。
2023-12-22 11:47:36
646
1
原创 按键扫描思路详解
第一次执行时,如果按下了,返回按下的值,第二次执行key_UP为0了,如果你连续按着,只返回一次结果,第二次if(key_up&&(KEY0。当mode为1时支持连续按那么key_UP始终为1,static只执行一次。第二次执行的时候就忽略static这句话了,化简程序为。0)key_up=1;这里面因为连续按也不满足,所以第二次直接返回return 0.这是二合一的代码(mode为0不支持连续按,为1支持)当一直扫描时会不停的反馈结果。当mode=0不支持连续按。
2022-11-12 23:59:55
1178
原创 看门狗实验
比如我们设定 prer 值为 4,rlr 值为 625,那么就可以得到 Tout=64×625/40=1000ms,这样,看门狗的溢出时间就是 1s,只要你在一秒钟之内,有一次写入 0XAAAA 到 IWDG_KR,就不。这里需要提醒大家的是,看门狗的时钟不是准。确的 40Khz,所以在喂狗的时候,最好不要太晚了,否则,有可能发生看门狗复位。一直喂狗就不会复位了,但是如果程序跑飞,就喂不成狗,就会复位了。主函数,1s为溢出时间,不喂狗会闪烁,1s内喂不会闪烁。单位ms,prer预分频值,rlr重装载值。
2022-11-12 23:02:54
868
原创 正点原子简单实验
头文件里记得声明函数。ifndef是为了避免头文件重复声明。led.h里面声明一次就行了,不用在main.h或者和其它.h里面声明了。在rcc.h头文件有时钟开启函数,APB2Periph这个。为什么用APB2呢,因为它能映射PA5这个GPIO。中文参考手册里面看RCC APB2寄存器。然后做一个0.5秒的开和关灯操作就行了。位6和位3是gpioE,gpioB。
2022-10-01 10:11:15
512
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人