
嵌入式软件随笔集
日常开发中,随笔记的一些好玩实用的信息
一个勺子x
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
自行实现log2对数运算
本文介绍了在硬件兼容性要求高的项目中实现2为底对数运算的方法。通过换底公式将问题转化为计算自然对数ln(x),提出了两种C语言实现方案:1) 整数版本采用对数变换级数进行循环收敛,通过缩放因子处理整数运算;2) 浮点版本直接计算级数,设置精度阈值控制迭代。原创 2025-08-01 14:25:45 · 44 阅读 · 0 评论 -
自动初始化使用示例-section作用
本文介绍了使用section实现代码自动初始化的方法。通过__attribute__((section()))将函数指针放入指定段,利用数字命名控制执行顺序。文章详细说明了相关宏定义和实现方式:1)使用__attribute__((section()))指定函数存储段;2)设计OS_INIT_EXPORT等宏实现硬件/软件初始化函数的分级注册;3)通过遍历段地址顺序执行初始化函数。该方法确保了初始化代码的规范统一,并以my_init_start到my_init_end的示例演示了从0到9.end的优先级执行原创 2025-06-18 11:41:36 · 186 阅读 · 0 评论 -
cmake添加库文件注意事项
cmake添加已有的库文件的注意事项原创 2024-05-17 14:39:21 · 232 阅读 · 0 评论 -
对调试信息函数的宏封装实用小技巧分享
如果有需求,还可以在宏中定义一个输出等级,do{}while(0)中判断一下输出等级再决定是否输出调试信息。在轻量型嵌入式开发中,没有单独的日志信息库,所以通常需要开发者自己对调试打印信息进行封装,这样即方便调试,也方便后续查问题,可以用一个宏开关对齐全局控制。另外就是在打印信息中,我们想要加入其他打印的信息,比如行号,函数名等等,但是又不想每写一句调试信息就写一边,就可以通过下面的方式,利用宏的可变参数实现。如代码段一,用宏去简单粗暴的定义,定义后编译后显示的占的空间很小,会直接被优化掉。原创 2023-06-09 15:25:41 · 170 阅读 · 0 评论 -
linux驱动modprobe和rmmod时提示NULL指针错误
因为是在之前的驱动上修改了框架,变动比较大,所以不少函数都变了,接下来就是令我郁闷的一个问题:在modprobe时看似没问题,也成功执行了。lsmod也能查看的加载的模块,在rmmod时直接出错?因为一时的疏忽大意,probe中使用了一个未初始化的指针,导致在modprobe时出错提示NULL指针。这个问题很快就查到了。如果一个probe函数探测失败,驱动向系统申请的有关资源都会被释放,如中断号,申请的内存等。是因为在调用probe时没有正确的返回0,内核认为驱动失败,rmmod时当然会出错。原创 2023-03-22 09:55:26 · 336 阅读 · 0 评论 -
低级BUG记录 - 我的sprintf瞎逼操作
这个错误明明就是很憨憨。之前没有那么多字符,后面又加了几个字符,没想到出现了溢出,函数体内部变量放在栈上,所以应该是导致栈数据异常,内存数据异常。查了老半天,真的是气死。代码不规范,熬夜黑眼圈,不该出的低级错误。最终导致我有一个全局变量莫名奇妙的变了。在自己项目中出现了的一段奇怪代码。原创 2022-11-24 00:46:29 · 173 阅读 · 0 评论