📘 嵌入式C可移植性编码规范
📚 30 章节
⚡ 跨平台 · 可移植
🧩 实战案例
🎯 友好色系
01
引言与背景
背景
为什么需要可移植性编码规范?嵌入式C的挑战与机遇。
02
基本数据类型与位宽
类型
int、long、char的跨平台陷阱,使用<stdint.h>固定宽度类型。
03
字节序处理
Endianness
大端与小端,如何编写字节序无关的代码。
04
数据对齐与填充
对齐
结构体对齐、packed属性、对齐宏的使用。
05
位操作与位域
位域
可移植的位操作宏,位域(bit-field)的跨编译器问题。
06
指针与内存管理
指针
指针大小、内存对齐、malloc/free的可移植性。
07
函数与调用约定
调用
函数原型、可变参数、调用约定的差异。
08
预处理器与宏定义
宏
#pragma once、#ifdef、宏的跨平台写法。
09
条件编译与平台检测
检测
检测编译器、操作系统、CPU架构的宏。
10
头文件组织与包含
头文件
防止重复包含、头文件依赖管理。
11
模块化设计与接口抽象
抽象
使用抽象层隔离硬件依赖。
12
编译器特性与扩展
扩展
__attribute__、__declspec、内建函数的可移植替代。
13
内联汇编与裸机代码
汇编
何时使用、如何封装、如何隔离。
14
中断服务程序(ISR)编写
ISR
ISR的可移植性考量,volatile的正确使用。
15
多任务与RTOS接口
RTOS
任务创建、同步原语、消息队列的抽象。
16
时间与延时处理
时间
时钟源、延时函数、时间戳的跨平台实现。
17
字符串处理
字符串
宽字符、字符编码、安全字符串函数(strncpy vs strlcpy)。
18
文件系统与存储
文件
文件路径、目录分隔符、文件操作的抽象。
19
网络编程基础
网络
socket API的封装、字节序转换、协议无关性。
20
调试与日志系统
调试
可移植的日志宏、断言、调试接口。
21
错误处理与异常
错误
返回码、errno、setjmp/longjmp的跨平台使用。
22
单元测试与模拟
测试
如何编写可测试的嵌入式C代码,使用模拟层。
23
代码风格与命名规范
风格
统一的命名规则、注释规范、代码格式化。
24
静态分析与代码检查
静态分析
使用lint、Coverity等工具进行可移植性检查。
25
版本控制与持续集成
CI/CD
Git工作流、CI/CD中的跨平台编译。
26
文档化与设计记录
文档
API文档、移植指南、变更日志。
27
案例研究:ARM→RISC-V
移植
从ARM Cortex-M移植到RISC-V的实战经验。
28
案例研究:FreeRTOS→RT-Thread
适配
从FreeRTOS移植到RT-Thread的接口适配。
29
未来趋势
趋势
Rust for Embedded、MISRA-C、Autosar C++14的影响。
30
总结与最佳实践清单
黄金法则
30条可移植性编码黄金法则。