本质是:控制硬件 + 可预测 + 稳定 + 节省资源
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);
}