交叉编译 ARM:在 x86 上为另一台机器构建
交叉编译就是用目标三元组与主机不同的工具链,在 x86 机器上构建 ARM 二进制。我用 armhf 和 aarch64 gcc 实际编译,用 file 和 readelf 验证目标格式,撞上一次真实的 Exec format error,再用 qemu-user 把 ARM 程序跑起来。
可移植、零依赖的 C——这门语言依然能跑在任何东西上,而它的约束往往正是优势。
12 篇文章
交叉编译就是用目标三元组与主机不同的工具链,在 x86 机器上构建 ARM 二进制。我用 armhf 和 aarch64 gcc 实际编译,用 file 和 readelf 验证目标格式,撞上一次真实的 Exec format error,再用 qemu-user 把 ARM 程序跑起来。
用 C11 原子操作和 acquire/release 内存序手写一个无锁 SPSC 环形缓冲区。真实基准测试、ThreadSanitizer 竞态检测、与互斥锁队列的性能对比。
很多单片机没有 FPU,一次 float 运算就是一次软浮点库调用。本文用真实 C 代码和真实输出讲清 Q16.16 定点数学:乘法溢出的真实失败、与 double 的真实误差、查找表正弦,以及诚实的计时对比与适用边界——包括什么时候不该用它。
gdb 实战指南:backtrace、core dump、条件断点、watchpoint、多线程调试,以及 -O0 与 -O2 的故事——全部来自真实程序的真实输出。
一次 Linux 上的 valgrind 实操:用真实的 memcheck 报告逐一看 C 语言内存泄漏、非法读写、未初始化值,再用 massif 看堆增长、callgrind 看指令热点、helgrind 看数据竞争——每条都配真实输出和修法。
用真实程序把字节序讲透:在 x86 上打印 32 位整数的字节、htonl 与网络字节序、直接发送结构体过 socket 的经典 bug、Modbus 寄存器,以及如何检测字节序并做字节交换。
为什么 C 结构体里存在空洞:真实的 sizeof/offsetof 数字、_Alignof、带 UBSan 未对齐加载报告的 packed 结构体、memcpy 序列化垃圾字节,以及在 x86-64 上实测的伪共享加速。
一次关于 C 语言未定义行为的实操:用真实的 AddressSanitizer 与 UBSan 报告逐一看越界读、use-after-free、有符号溢出、非法移位、空指针解引用和严格别名,并给出对应的修法。
超级循环对许多设备来说够用,但一个慢任务会拖垮所有其他任务。用真实测量展示抖动和漂移,以及无需 RTOS 的修复方案:固定时间片调度器、状态机和看门狗。
一份务实的 2026 年 ESP32 vs ESP8266 选购指南:CPU、内存、Flash、Wi-Fi、BLE、GPIO、安全、功耗、工具链与价格档位,附决策表和按场景的具体推荐——包括什么时候 ESP32-C3 才是默认答案。
一篇可以直接照做的 ESP-IDF 教程:如何在 Arduino、PlatformIO 与 ESP-IDF 之间做选择,安装工具链、认识工程结构、写一个最小 app_main、点亮 GPIO、用 UART 打日志,最后让 ESP32-C3 以 station 模式连上 Wi-Fi,所有命令均可复制。
ESPTier 用纯 C 在 ESP32-C3 上复刻了 EasyTier v2.6.4 的线协议——TCP 分帧、SipHash-1-3 身份、AES-128-GCM、路由同步与转发——让一颗受限 MCU 成为 overlay 网络中真正可被 ping 通的一员。