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);
}
相关推荐
着迷不白4 小时前
Linux系统故障修复、日志管理与安全加固实战指南
开发语言·php
贺国亚4 小时前
A2A协议与Agent互操作-Task生命周期
开发语言·qt
炸薯条!5 小时前
从零开始学C++(4) --类和对象
开发语言·c++·算法
渡我白衣5 小时前
打印宏与socket模块设计
java·linux·开发语言·c++·ide·人工智能·eclipse
Wang's Blog5 小时前
Go-Zero框架上手前奏2: 微服务核心要素 —— 拆分、通信与无状态设计
开发语言·微服务·golang
我是坏垠15 小时前
Crypto、Cipher与Password:Java加密开发的三个核心概念
java·开发语言·python
white_ant15 小时前
JDK LTS 版本升级迁移注意事项大全
java·开发语言
Bobolink_15 小时前
跨境业务网络环境评估,“干净、一致、独享”三个关键指标
开发语言·网络·php·跨境网络·网络环境
你怎么知道我是队长15 小时前
JavaScript的变量和数据类型介绍
开发语言·javascript·ecmascript