- 博客(57)
- 收藏
- 关注
原创 欧芯LKS32MC07
尽量使用变量标志位来做互斥,尽量不要用这种函数,在中断跳转时容易卡死到while(UART_GetIRQFlag==0);循环里,可以类似的理解为freertos里的互斥锁。//send_flag=1为可以发送。这里一定要加volatile防止while等待时被优化。
2025-11-10 17:43:10
226
原创 keil的jlink识别不到芯片
法一:Keil5重新创建工程文件,使jlink重新在keil5中选择芯片(如果选择不到芯片,选择响应的芯片架构也行,比如M0)法二:删除keil5工程文件中 与jlink相关的文件(其实就是删除历史残留文件),使jlink重新在keil5中选择芯片。
2025-11-07 16:08:55
184
原创 HFI 高频方波注入
一个周期为N的谐波信号,其最小的基波周期就是使x[n]=x[n+N]成立最小正整数N,而w0=2pi/N就是最小的基波频率。
2025-10-12 17:48:14
305
原创 滑膜观测器
1、在调试时可以观察以前电机调好参数时它对于的波形 再对着这个波形整定。2、调试时可以先不看最终的波形 可以看滑膜观测器内部参数的波形。
2025-09-29 00:25:33
448
原创 宏定义使用
// 返回计算结果。\ // 缓存参数。使用 do { ... } while(0) 包裹并缓存参数。支持任何类型的参数(需编译器支持 typeof)。对于支持 C99 及以上标准的编译器,优先使用。缓存参数值,确保参数仅求值一次。调试友好(函数名在符号表中可见)。确保参数仅计算一次,避免副作用。类型安全,编译器可做参数检查。参数仅计算一次,无副作用风险。
2025-05-25 07:53:58
271
原创 RTOS工控板
CAN波特率 = 时钟频率 / ((时间单元1+时间单元2+重新同步跳跃时间单元)* 分频系数)上图设置波特率为:500kbps = 36M/((8+9+1)*4)
2025-05-07 14:36:23
155
原创 卸载一直显示在运行的应用
如果担心有注册表,可以使用CCleaner.exe来删除注册表,和微软自带的软件来完全卸载。直到出现.exe应用,最后打开任务管理器搜索此.exe应用,关闭它。Ctrl+A全选卸载,他会显示有正在运行的软件点击跳过。然后打开被跳过的文件,Ctrl+A全选卸载。可能还是会显示有正在运行的软件点击跳过。
2024-11-12 20:14:21
3143
原创 微型芯片os
纯C无操作系统轻量协程库Protothread使用记录-优快云博客序章:Protothreads的原生特性_适配protothreads-优快云博客
2024-10-21 14:09:07
223
原创 TCP协议
/对于一个十进制数8080 它对应十六进制数为1F 90。//大端存储 1F 90。//小端存储 90 1F。按照流程一步一步来编写。
2024-09-20 13:24:51
484
原创 PCB绘制
这三个孔的本质都是用来换层的,是它本来走线走不下去了需要解决走线问题才打孔。盲孔:起点永远是第一层(或最后一层),终点肯定不是最后一层(或第一层)埋空:起点和终点肯定不是最后一层和第一层。通孔:起点和终点肯定是最后一层和第一层。
2024-09-13 01:28:15
289
原创 c/c++面试100道
疑问:C++中struct和class的区别有一点特殊的是,当class定义时,如果没有string name这种复杂的定义则其他简单定义就不会初始化。
2024-09-08 16:00:27
1871
原创 C++学习
总结一下可以用迭代器的:vector,set,map,unordered_map,unordered_set。P16 unordered_map和unordered_set:两个无序(顺序是乱的)的键值对和集合。这里isalnum()因为是返回的bool类型所以返回的值是不确定的只能为0或非0。注意:auto的定义一定要初始化,它是根据你后面输入值的类型来判断的。因为栈只能操作栈顶元素,所以是没法用迭代器获取所有值的。不可以用迭代器的:stack,queue。P19 sort(排序功能)
2024-09-07 20:16:02
382
原创 正点原子无人机浅析
在定义这个队列的句柄的时候不要把它暴露不出去,让rxQueue和txQueue两个句柄在自己对应的函数实现并调用;为了满足别的文件有需要(调用从队列得到相应变量或者通过队列发送相应变量),我们可封装一个函数,在函数里执行,不会把rxQueue和txQueue暴露给应用层,应用层只管调用API就行了。这里引入韦东山讲的队列集思路,我们还可以用函数封装队列句柄(return 句柄),这样也能满足你需要在别的文件调用时可以使用别的文件的句柄,这样我们就可以在别的文件使用队列集(因为需要使用队列的句柄)
2024-09-05 18:54:23
427
原创 函数指针学习
int data;} Node;标签(modemode是结构体的标签名。在这种定义中,mode是结构体类型的名称,但Node是通过typedef创建的别名。好处标签的存在: 标签mode使得你可以在结构体类型的定义中引用自身(对于自引用结构体类型)。如果结构体内部有指向自身的指针时(如链表中的next指针),标签是必要的。自引用: 如果你需要在结构体中使用指向相同类型的指针(例如链表中的next和pre),标签是必须的。int data;// 不能在此处使用指向自身的指针,因为没有标签。
2024-09-04 14:03:31
860
原创 git仓库使用
如果要使用请务必把文件复制到别的空间去再在这个别的空间更改文件和程序。使用 git clone命令把后面连接的地址的文件拉取到本地。从那个最原始的地方拉取(从gitbub更新文件到本地)电脑左下角搜索git打开GitBash.exe。因为你在本地目录更改文件会使文件无法更新。git是用于管理github的工具。git仓库是会限制空间大小限制的。下载到本地的文件不要更改!进入到要下载到本地的目录。
2024-05-14 00:10:39
361
原创 智能空气净化器+智能投喂系统
代码本身是没有问题的,所以有的时候如果卡住了,可以尝试换一换心情,用(led调试的方法来检查是不是程序卡住了,程序卡在了哪里)。,只需要在IIC_Wait_Ack()的函数前加上static就行了,但是函数就只能在被定义的文件内使用了。因为tof.c和oled.c两个文件中都各自定义了自己的IIC的函数(屎山代码),所以出现了重定义。在调试蓝牙的时候还是遇到了电压或单片机自身的问题(可以用led亮与不亮的方法来调试),关于一些蓝牙的封装的库,可以在雷老师发的esp8266的项目的bsp里找到。
2024-04-28 22:38:01
398
原创 DMA串口收发+esp8266
在进行DMA初始化的时候要设置 优先级,避免同时使用DMA。可以通过DMA的发送和阿里云内容的读取实现数据接收的监视。同时uart 中断的优先级也要设置。
2024-04-28 22:37:46
510
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅