C51是阉割的C

嵌入式Linux

共 924字,需浏览 2分钟

 ·

2024-07-16 08:15

在知乎上看到一个问题,有一个博主回答了为什么在单片机中有很多全局变量。

他是这样回答的

我的实践经验告诉我,嵌入式编程 中,通过函数传递的形参多了,看上去并不是一个好事情。
事情大概是用C51 实现一个I2C从机,在I2C从机的中断服务程序 中,需要频繁调用一个函数。当这个函数有三个形参时,I2C主机必须降速到20kHz才能正确地连续写4byte 数据到I2C从机,否则当I2C主机在standard mode的100kHz,I2C从机就只能正确接收头2个byte数据。
当我把该函数的三个形参,缩减到两个形参,把被缩减的形参用全局变量来解决传递问题,I2C主机就可以以100kHz速率正确地连续写4byte数据到I2C从机了。
我猜,是因为在I2C从
就会延长该函数的被执行时间,在时序比较苛刻的条件下,就完全可能导致意想不到的结果!
作者:zhoujian29
链接:
https://www.zhihu.com/question/396710272/answer/3530885002
来源:知乎

其中有一个网友的评论说到了点子上
c51不是标准c语言,为了在51这个螺蛳壳里面做道场,放弃了标准c语言的很多特征,最典型的就是传递参数并不是通过堆栈,局部变量也不是在堆栈上面分配出来的。建议还是看下最终生成的汇编。
===
大家在实际项目上一定要特别严谨,需要根据实际芯片和项目来进行开发,前段时间,我一个朋友开发的时候遇到这样一个问题,说是不能有太多的打印日志,如果打印太多就出现问题。

浏览 270
1点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
1点赞
评论
收藏
分享

手机扫一扫分享

分享
举报