单片机开发琐碎知识记录

单片机编程中用到的基本都是无符号数,比如unsigned char

有时,unsigned char太长了,可以用宏定义来简化,比如:

#define uchar unsigned char

在STM32中常用如下宏定义:
#define u8 unsigned char
#define u16 unsigned short
#define u32 unsigned int

按住shift可临时切换到大写。

c语言不支持二进制常量的表示法;支持8进制前面加0;16进制加0x;还有默认的10进制。

C语言中,变量定义要放在最前面,不然可能会出错。

在后面使用的部分要放在前面,不然会报错。

字符对应的二进制码就是ASCLL码。

在单片机中,应该尽量避免进行小数运算。小数运算一般转成整数运算。
比如:409*0.0625,转换成409*625/10000

有些高性能芯片直接就设计了一块专用电路,来实现浮点数的运算,大大提高了浮点数计算速度。同理,有些芯片也实现了乘除法的独立运算。

如果单片机引脚提供的电流不够,通常就会接放大电路。 

 

新版的编译器要求,变量的声明和定义要放在前面,不推荐在任何的声明前有其他语句。

应该是:

        所有的声明定义;

        其他语句;

而不是:

        声明定义;

        其他语句;

        声明定义;

        其他语句;

我们看到的地址通常都是这种形式,0x12345678,于是我们会根据思维定势以为这就是一个地址指针,然后想着对它解引用,*0x12345678 = 12;这是错误的。因为此时的0x12345678根本就不是一个指针,只是一个普通的数字,只不过用十六进制的形式来表示而已。

可以通过强制类型转换来实现上述操作,比如:* ((int *)0x12345678) = 12;

原子操作:

指的是由多步操作组成的一个操作。如果该操作不能原子地执行,则要么执行完所有步骤,要么一步也不执行,不可能只执行所有步骤的一个子集。按照这种思路,在单核系统中,一个单独的指令不能被拆分执行,也可以视为原子操作,具体参考:原子操作_justkong的博客-CSDN博客_原子操作 

回调函数:回调函数是指 使用者自己定义一个函数,实现这个函数的程序内容,然后把这个函数(入口地址)作为参数传入别人(或系统)的函数中,由别人(或系统)的函数在运行时来调用的函数。函数是你实现的,但由别人(或系统)的函数在运行时通过参数传递的方式调用,这就是所谓的回调函数。

通过指针实现间接调用,为什么不直接调用?是为了更好地分层处理,我们在调整时,只需关注回调函数即可,而不必去修改其他部分。

直接参考:回调函数详解_~青萍之末~的博客-CSDN博客_回调函数

接触一款新的单片机时,先看数据手册,了解单片机的大体情况,然后看参考手册的前几章,了解具体结构和功能设计。之后,要开发哪个外设,就再看哪个外设的章节。不要贪多贪大,要循序渐进。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值