嵌入式C语言总结

这几天花了两天时间看了一些嵌入式C语言方面的内容,以下是一些读书笔记,记录一下。

 

  • 中断服务程序

1、不能有返回值

2、不能向ISR传递参数

3、ISR尽可能的短

4、Printf有重入问题


  • 硬件驱动模块

1、中断服务程序ISR

2、硬件初始化

 

  • 内存操作

1、某IO芯片被定为在CPU的存储空间而非IO空间,而且寄存器对应于某特定地址

2、两个CPU之间以双端口RAM通信,CPU需要在双端口RAM的特定单元书写内容以在对段CPU产生中断

3、读取在ROMFLASH的特定单元所烧录到汉字或英文字模

在使用绝对地址指针是,自增自减操作的结果取决于指针所指向的数据类型

p++ => p += sizeof(typeof(*p))

CPU以字节为单位编址,C语言指针以指向的数据类型长度作自增自减

  • 函数指针

函数只是一个地址,可以如下使用。

Typedef void (*func)();

Func ifunc = (func)0xF000FFF0;

Ifunc();

  • 数组 vs. 动态申请

1、尽可能选用数组

2、动态申请,mallocfree成对出现

  • 关键字const

Const意味着只读

Const int a; a只读

Int const a; a只读

Const int *a; 指针a指向的只读

Int * const a; a本身只读

Int const *a const; 综合上面两个

  • 关键字volatile

1、并行设备的硬件寄存器

2、一个中断服务子程序会访问到的非自动变量

3、多线程应用中几个线程共享的

CPU字长和存储器位宽不一致处理

  • 如何应用面向对象到嵌入式开发中
  • 性能优化

1、使用宏定义

2、使用寄存器变量

3、内嵌汇编

4、或用位操作

  • 代码的运算速度

1、二维转换为一维

2、去掉浮点运算

3、用移位替代除法

4、预先计算查表

5、依赖硬件实现

6、Inline asm

  • 数组大揭秘

1、数组名的内涵在于其指代实体是一种数据结构

2、数组名的外延在于其可以转换为指向其指代实体的指针,而且是一个指针常量

3、指向数组的指针则是另外一种变量类型,仅意味着数组存放地址

4、数组名作为函数型参时,沦为普通指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值