C语言嵌入式风格

本质是:控制硬件 + 可预测 + 稳定 + 节省资源

1、不滥用动态内存(几乎不用 malloc)

c 复制代码
static int buffer[10];
# 更喜欢这种确定大小的代码

2、大量使用 volatile

c 复制代码
volatile uint32_t *reg = (uint32_t *)0x40021000;

3、直接操作寄存器

c 复制代码
#define GPIOA_ODR  (*(volatile unsigned int*)0x4001080C)

GPIOA_ODR |= (1 << 5);
# 本质上操作任何的寄存器也好或者是其他的硬件也好,在代码里的体现都是去直接操作对应的地址而已

4、避免复杂语法,更加注重可读性

5、状态机机制(留个坑,后面来填)

嵌入式代码举例:

c 复制代码
#include "stm32f10x.h"

void LED_Init(void)
{
    RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
    GPIOC->CRH &= ~(0xF << 20);
    GPIOC->CRH |= (0x1 << 20);
}

void LED_On(void)
{
    GPIOC->ODR &= ~(1 << 13);
}

void LED_Off(void)
{
    GPIOC->ODR |= (1 << 13);
}
相关推荐
小七在进步2 分钟前
类和对象(三)
java·开发语言
夜不会漫长3 分钟前
C++:类和对象(1)
java·开发语言·c++
czt_java7 分钟前
Java文件IO核心知识点总结
java·开发语言
szarron16 分钟前
HTOOL‑SA12 + HT06 近场探头组合实操|手持设备工位 EMI 预兼容排查完整流程
运维·服务器·开发语言·网络·射频工程·频谱仪
菜鸟~noob23316 分钟前
【电子战】第07篇:多普勒测向【含matlab代码】
android·开发语言·matlab
Wang's Blog19 分钟前
Java框架快速入门: Spring Security+OAuth2之跨域处理
java·开发语言·spring
雪芽蓝域zzs20 分钟前
第四十二节:全局字典封装(后端字典,下拉选择复用)
开发语言·前端·javascript
_JoeZoe21 分钟前
阿里云开发者社区用户服务协议
c语言·编译器·历史·应用领域·unix操作系统
老王爱玩车24 分钟前
第2讲:C语言数据类型和变量
c语言·开发语言