- 博客(94)
- 收藏
- 关注
原创 CPU眼里的 class vs struct
但要知道这里的函数指针变量memFunc是需要占用内存的:图片现在的结构体b不仅有两个8字节的long类型变量x和y,还有一个函数指针memFunc,所以它所占据的内存空间,从以前的16字节,扩大到了24字节。当然,虽然面向对象的效果是达到了,但显然没有用C++的class那么简洁、优雅,再加上满天飞的函数指针,可读性也会差很多。当然,这里我们只讨论C语言中的struct跟class之间的差异,因为C++中的struct,已经被强化的很厉害了,甚至可以定义构造函数和析构函数,已经非常接近class了。
2023-11-10 10:26:01
188
原创 如何将bootlooder和APP合成一个文件
另外,实际项目中,经常会使用内部flash空闲扇区保存一些设备参数信息,如校准系数、设备地址、序列号等信息,我们可以将参数信息保存为一个bin文件,通过该方式和固件合并,这样量产时将参数和固件一并写入,提高生产效率!第三步,重命名txt文件为".bat"后缀文件,即是Windows可执行脚本的文件类型 第四步,双击运行脚本,即可生成目标文件 出现任何目标文件生成失败的情况,检查相关源文件是否存在,路径是否正确。因此,在发布固件的时候,会存在BootLoader固件和App固件;前两者太繁琐,效率低下;
2023-11-10 10:08:06
729
原创 基于面向对象的思想轻量级的嵌入式框架
当然,也可以将前6个功能裁剪出来,然后运行在现有的嵌入式系统上面,这样子也可以满足实时性的需求。本篇实现的功能比较基础,但是整个框架开发的根基,后面所有扩展的功能都需要在此环境下进行开发。为了减少框架对资源的消耗,所以初步设定框架的最小时间周期为1ms,因此我们需要设置systick的定时周期为1ms,然后每次进入中断为我们的框架计数即可。关于硬件环境的搭建不多说,可以参照开发板提供的例程来搭建,板级初始化完成了调试串口和systick的初始化。/* 系统滴答程序(需挂在硬件的时间中断里边) */
2023-11-06 10:45:28
262
原创 卡尔曼滤波讲解
这种情况是有可能发生的,例如,我们基于旧的位置来估计新位置。跟踪这种关系是非常重要的,因为它带给我们更多的信息:其中一个测量值告诉了我们其它变量可能的值,这就是卡尔曼滤波的目的,尽可能地在包含不确定性的测量数据中提取更多信息!实际上,如果以正确的方式看待它,卡尔曼滤波是非常简单和容易理解的,下面我将用漂亮的图片和色彩清晰的阐述它,你只需要懂一些基本的概率和矩阵的知识就可以了。在这个例子中是位置和速度,它也可以是一个容器中液体的总量,汽车发动机的温度,用户手指在触摸板上的位置坐标,或者任何你需要跟踪的信号。
2023-10-23 21:32:03
173
原创 免费开源的在线手绘画图工具
无论你是学生、老师、设计师还是工程师,你都可以在这个网站上找到适合你的图表模板,或者从零开始自己设计。2、在下方的工具栏中,你可以选择不同的图形元素,如矩形、圆形、箭头、文本等,然后拖拽到画布上放置。无论你是为了学习、工作还是娱乐,你都可以在这个网站上发挥你的创意和想象力。4、 在顶部的菜单栏中,你可以撤销、重做、复制、粘贴、对齐、分组等操作。3、在右侧的属性栏中,你可以调整图形元素的颜色、大小、旋转角度等属性。支持图片、各种形状、对勾、高亮、框架。支持画笔、橡皮、箭头、文本框。转自《爱编程爱技术》
2023-10-20 18:34:17
789
1
原创 适用于嵌入式单片机的差分升级通用库
王瑞/mcu_bsdiff_upgrade适用于嵌入式单片机的差分升级库,通用所有单片机,如stm32、华大、复旦微、瑞萨等。适合嵌入式的差分升级又叫增量升级,顾名思义就是通过差分算法将源版本与目标版本之间差异的部分提取出来制作成差分包,然后在设备通过还原算法将差异部分在源版本上进行还原从而升级成目标版本的过程。适合嵌入式的差分升级又叫增量升级,顾名思义就是通过差分算法将源版本与目标版本之间差异的部分提取出来制作成差分包,然后在设备通过还原算法将差异部分在源版本上进行还原从而升级成目标版本的过程。
2023-10-10 20:21:11
859
原创 cJSON在单片机中的使用
cJSON_AddItemToObject(main_root, “我是嵌套的cJSON”, main_m_root);cJSON_AddItemToObject(main_root,“我是嵌套的数组”,main_l_root);cJSON_AddStringToObject(main_m_root, “淘宝店”, “This熏”);cJSON_AddStringToObject(main_root, “我的名字”, “老刘”);对于单片机而言,需要修改Heap_Size,不知道如何修改的,可以联系我。
2023-09-28 14:49:40
465
原创 内存中为什么分堆和栈,能否只用一种模型呢?为什么每个线程都有单独的栈
一般不建议在线程中用new开辟新内存空间,因为heap是共享的,所以一个线程在用new的时候别的所有线程都得停下来等,这样就有很大的同步代价. 如果m个线程每个线程分配n大小的内存到heap,那么就需要m次内存分配的操作,所有的线程需要等m次。在学编程的时候,我们应该都听过一句话 “如果程序结束之后仍然想要访问那一段数据就要用堆(不释放的话,程序修改后的数据仍存在)”,我想这个其实就是本题目的关键了,堆和栈都有其自己的独特性,可能你了解这两个东西,但是我还是解释下,以免别的小伙伴在看答案的时候,不知道。
2023-09-26 15:13:08
143
原创 mermaid之时序图
#mermaid-svg-QDbK2lpK8LAUwCDg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QDbK2lpK8LAUwCDg .error-icon{fill:#552222;}#mermaid-svg-QDbK2lpK8LAUwCDg .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QDbK2lp
2023-01-07 16:20:40
564
原创 nullptr打印出来是什么?
笔者写了这样一段代码,运行结果尽然跟笔者想得不一样???ObjetA a_ptr= nullptr;prinf("the a ptr is %d/n", a_ptr);if(a_ptr != nullptr) {}
2022-12-11 12:01:39
321
原创 c/c++程序编译过程
预处理,加入包含的头文件,生成.i文件将预处理后的文件翻译成汇编语言,生成.S文件将汇编语言翻译成机器语言,生成.o文件链接,生成可执行文件
2022-10-13 12:34:33
195
原创 UML和mermaid表示
1.类的表示第一栏是类名,第二栏是成员变量,第三栏是成员函数+:公有ˉ:私有#mermaid-svg-cECEHAwT2OA09X5s {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-cECEHAwT2OA09X5s .error-icon{fill:#552222;}#mermaid-svg-cECEHAwT2OA09X5s .error-text{fill:#5
2022-10-10 08:30:57
196
原创 使用C++类成员函数作为C库的回调函数
typedef std::function<void(int a, int b)> DataCallback;void register_test(DataCallback cb) { int x = 5, y = 6; cb(x, y);}class A { public: A(); ~A(); void f(int k,
2022-09-28 12:45:12
922
原创 c语言编译时打印宏的值
#pragma message只能打印字符串"#"可以把内容变成字符串#define TEST 5#define PRINT_MACRO_HELPER(x) #x #define PRINT_MACRO(x) #x "=" PRINT_MACRO_HELPER#pragma message(PRINT_MACRO(TEST))
2022-09-01 21:30:13
1846
原创 常用滤波方法
1.中位值滤波的算法: 连续采样 N 次(N 取奇数)把 N 次采样值按大小排列(多采用冒泡法)取中间值为本次有效值。其优点能有效克服因偶然因素引起的波动 (脉冲) 干扰,对温度、液位的变化缓慢的被测参数有良好的滤波效果。缺点是对流量、速度等快速变化的参数不宜。...
2022-08-26 09:58:14
360
原创 持续集成之道
稳定分支与新功能分支原则一:永远使用最新的稳定分支,除非产品确定不再迭代。原则二:新功能分支一定周期后要转稳定分支,这个周期要约定好。子模块同步为避免临时分支构建时,子模块不同步问题,可以采用定期合入再牵出的办法,保持子模块的更新,又不影响临时分支构建。...
2022-07-21 20:58:25
94
原创 机器人之里程计
1.两轮小车的位置描述p(x, y, thelt)2.两轮小车的运动模型1).小车的线速度v = (vl +vr) /22).小车的运动可以微分成绕着某个点做圆周运动
2022-07-19 21:32:19
132
原创 嵌入式linux的gdb使用
1.gdb执行在交叉编译环境执行gdb 带debug信息的可执行文件 core文件2.依赖库的查找执行过程可能会报错Could not load shared library symbols解决办法:在gdb下执行”info sharedlibrary”,看缺少哪些库设置依赖库查找路径,可以直接在gdb下执行设置绝对路径,多个路径之间以冒汗隔开set solib-absolute-prefix...
2022-07-11 21:19:31
382
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人