网易首页 > 网易号 > 正文 申请入驻

嵌入式开发的秘密武器:你不可不知的C运行时库

0
分享至

前言

本篇文章主要讲解嵌入式C运行时库,涉及 Keil MicroLIB 、 IAR libc 、 Newlibc 、 Newlibc-nano 以及最新的适用于现代嵌入式运行环境的 picolibc 。

在嵌入式开发中,我们经常关注底层驱动、寄存器配置或 RTOS 调度,但有一个“幕后英雄”一直默默支撑着你经常使用的 printf/malloc 甚至基础的数学计算 (sqrt,pow,sin,abs) 等函数的运行—— C 运行时库 (libc)。

一、为什么嵌入式系统需要 libc?

可能很多人会问: 裸机程序也需要用 C 运行时库(libc)吗?

当你写下 uint8_t *p = malloc(10); 或者 memset(buf, 0, 100); 时,编译器本身并不知道如何分配内存或高效地擦除你传入的内存字节,这些功能的具体实现代码就存放在 libc 中;

看到这里你可能又会问: 那我不调用那些C库里面的函数不就行了?

事实是,只是在你编写的应用代码没有显式调用而已,在main函数之前的启动阶段,libc已经为你铺好了执行你编写的代码的运行时环境。


图1:libc在启动过程中的作用

libc 提供了一个最基本的C运行环境,让 C 语言代码能够“跑起来”。

libc 的核心作用:

  • 标准接口 : 提供符合 ANSI C/POSIX 标准的 API,让代码具备可移植性。

  • 算术辅助 : 在没有浮点运算单元 (FPU) 的低端 MCU 上,通过软件模拟实现浮点运算。

  • 启动支撑 : 在进入 main 函数之前,负责初始化全局变量(.data 段)和清零未初始化变量(.bss 段),堆内存块初始化,为 malloc 做准备。

  • 资源管理 : 提供堆内存管理 (malloc/free) 和字符串处理。

二、主流嵌入式 libc 大比拼
为什么 Keil/IAR 等开发工具需要收费?

除了提供一个基本的工程管理、代码编辑和程序调试环境之外,还包含着厂家为嵌入式芯片高度优化的libc库,这才是核心价值;让你上手即用无需关心编译链接等底层细节;

不同的编译器供应商和开源社区针对嵌入式资源受限的特点,推出了各具特色的 libc 实现,下面具体介绍主流的C库各自的特点:


图2:不同libc实现对比


  • ARM Microlib:极致精简的“商业范” :Microlib 是 ARM MDK (Keil) 专门为微控制器设计的优化库。

    • 特点 : 极度节省 RAM 和 Flash。它去掉了许多对嵌入式不必要的标准 C 特性(如不支持所有的 C99 标准,不支持操作系统级功能)。

    • 局限 : 与标准库不完全兼容,主要用于极小容量的芯片。

  • IAR C-Library:高度可定制的“老大哥” :IAR 编译器自带的库以效率著称。

    • 特点 : 提供从 "None" 到 "Full" 多个优化级别。开发者可以通过配置,决定是否支持多字节字符、是否支持格式化输入输出

    • 优势 : 与 IAR 编译器深度集成,生成的二进制代码通常非常紧凑。

  • Newlib & Nanolib:GCC 界的“常青树” :在使用开源 GCC 编译器时,Newlib 是默认选择。使用nano版本链接选项: --specs=nano.specs

    • Newlib : 功能非常全,但它最初是为工作站设计的,对于只有几十 KB Flash 的单片机来说太臃肿了。

    • Nanolib : 为了解决 Newlib 过大的问题,ARM 针对 GCC 推出了 Nanolib。它通过简化 printf(去掉浮点支持)和优化内存分配逻辑,显著减小了体积。

三、着重介绍:picolibc:嵌入式 libc 的新标杆

虽然 Nanolib 已经很优秀,但它本质上是在为老旧的 Newlib “打补丁”。随着 Zephyr 等现代嵌入式系统的兴起, picolibc 应运而生。它由开发者 Keith Packard 基于 Newlib 和 AVR-libc 的优秀特性整合而成,旨在成为完全适配嵌入式环境的终极方案。


图3:Picolibc主要特点

picolibc 做了哪些“天才”工作?

  1. 1. 剔除过时的“大块头”

    • • 彻底移除了 Newlib 中针对 80/90 年代大型系统的代码,专注于 32 位及以上架构(如 ARM, RISC-V)。

  2. 2. 现代化的 IO 实现(Tiny stdio)

    • • 传统的 printf 往往会引入几 KB 甚至十几 KB 的代码量。picolibc 重写了 stdio ,默认不带浮点支持,但可以根据需求轻松开启,且代码路径极短,极大地减少了调用栈深度。

  3. 3. 内存布局的深度优化

    • • 引入了更灵活的启动代码 (crt0) ,允许直接在 Linker Script(链接脚本)中定义堆栈位置,不再需要像 Newlib 那样通过复杂的 sbrk 系统调用来管理内存,这对于没有操作系统的“裸机”开发极其友好。

  4. 4. 彻底解决多线程安全问题

    • • 在 RTOS 环境下,传统的 libc 往往需要复杂的 __retarget 实现才能保证 errno 等变量的线程安全。 picolibc 在设计之初就考虑了 TLS(线程本地存储) ,能够更自然地与现代 RTOS 集成。

  5. 5. 内建 CI 测试,可靠性高

    • 多架构模拟覆盖 : 每次代码提交都会在 CI 系统中触发自动化构建。利用 QEMU 模拟器,它能够覆盖 ARM (Cortex-M0/M3/M4/M7/A)、RISC-V (32位与64位)、i386、x86_64、甚至 AVR 等多种架构。

    • 严苛的单元测试 : 内建了大量的数学库(libm)精度测试和标准 C 逻辑验证。这意味着开发者在使用 sinfprintf 或内存分配函数时,可以确信这些代码在特定硬件架构上的行为与预期一致,极大降低了因库函数缺陷导致的系统崩溃风险。

  6. 6. 与现代构建系统(CMake、meson)兼容,易于集成

    • • 提供标准的 .specs 文件和配置接口,可以轻松集成到 CMake 项目中。在 Zephyr RTOS 或基于 CMake 的 STM32/ESP32 项目中,通常只需要简单的链接标志配置即可完成切换;

四、总结

如果追求快速上手且预算充足,Keil 的 Microlib 或 IAR 的库是省心的选择。

如果使用 GCC 且硬件资源适中, NanolibNewlibc-nano 是目前的主流。

如果正在开发现代嵌入式项目,如 基于Zephyr开发使用RISC-V内核芯片 ,或者对代码体积和性能有极致追求, picolibc 无疑是目前最先进、最值得尝试的运行时库。

libc 是嵌入式 C 程序的“地基”,不同实现各有取舍。 picolibc 作为最新的嵌入式专用 libc,不仅解决了体积与功能的平衡,还提供了跨平台测试与现代构建支持,正在逐渐成为嵌入式开发的理想选择。

目前 Zephyr 已默认启用 picolibcESP32的IDF框架 也将其作为实验特性加入到配置菜单中,相信再过几个版本迭代会作为默认的libc库;

如果有兴趣学习了解Zephyr、体验 picolibc 特性的小伙伴可以阅读以下文章搭建开发环境,开启现代嵌入式开发的大门吧!

RTOS:ZephyrOS | Out-of-Free模式—为自定义硬件创建应用代码

ZephyrOS:手把手教你搭建开发环境!!编译第一个Zephyr "hello,world"例程

RTOS | 从Keil的“手工坊”到Zephyr的“工业化”:嵌入式开发的思维跨越

ZephyrOS:不得不学习的物联网开发利器——ZephyrOS介绍

其他文章:

【嵌入式C语言开发设计篇】写了这么多年单片机代码,原来一直在瞎写!!

一个细节看出你是嵌入式新手还是老兵

换芯片再也不用怕!使用C语言实现多态与继承构建统一的外设接口驱动

嵌入式C语言优化篇——让你的代码飞起来!!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
林诗栋回应小组赛状态:比赛强度远超想象,庆幸有淘汰赛机会

林诗栋回应小组赛状态:比赛强度远超想象,庆幸有淘汰赛机会

懂球帝
2026-05-05 19:39:09
43岁男子和富婆车震后,富婆还想要更多,2016年他将51岁富婆杀死

43岁男子和富婆车震后,富婆还想要更多,2016年他将51岁富婆杀死

汉史趣闻
2026-04-06 19:17:12
准时暂停了,中方限制硫酸出口,德国政府喊话伊朗,立即开放海峡

准时暂停了,中方限制硫酸出口,德国政府喊话伊朗,立即开放海峡

有牙的兔纸
2026-05-05 20:02:12
尼日尔撕毁4亿美元合同,并驱逐中方高管,我方暗藏后手漂亮反击

尼日尔撕毁4亿美元合同,并驱逐中方高管,我方暗藏后手漂亮反击

诡谲怪谈
2025-04-30 22:17:42
奖金462万?吴宜泽缴税数曝光:到手仅剩245万 代言将成收入大头

奖金462万?吴宜泽缴税数曝光:到手仅剩245万 代言将成收入大头

风过乡
2026-05-05 18:27:22
单品一天卖250万元,让男人疯狂的“解压玩具”,砸出一个新风口

单品一天卖250万元,让男人疯狂的“解压玩具”,砸出一个新风口

电商在线
2026-05-04 10:12:20
不少博主拿孩子测试享界副驾驶折叠,网友怒喷:既没常识也没底线

不少博主拿孩子测试享界副驾驶折叠,网友怒喷:既没常识也没底线

映射生活的身影
2026-05-05 20:09:21
比亚迪这波降价,不只是真香,而是把一部分人直接推到了分岔路口

比亚迪这波降价,不只是真香,而是把一部分人直接推到了分岔路口

三农老历
2026-05-05 15:01:13
澳洲人最爱的饮品, 竟是最好的"保肝药"?! 可降低50%肝癌风险

澳洲人最爱的饮品, 竟是最好的"保肝药"?! 可降低50%肝癌风险

澳微Daily
2026-04-24 15:49:20
加快男性衰老的原因:喝酒仅排第5,排在第1的,很多男性都没发现

加快男性衰老的原因:喝酒仅排第5,排在第1的,很多男性都没发现

芹姐说生活
2026-04-30 16:07:48
干倒KTV的,可能是洗浴中心?用“白菜价”做成的暴利生意

干倒KTV的,可能是洗浴中心?用“白菜价”做成的暴利生意

世界圈
2026-05-05 13:37:18
媒体人:前NBA发展联盟助教李昂将担任吉林主教练

媒体人:前NBA发展联盟助教李昂将担任吉林主教练

懂球帝
2026-05-06 00:48:07
22岁世界冠军的奖金规划:先解决刚需

22岁世界冠军的奖金规划:先解决刚需

体坛观察猿
2026-05-05 18:55:10
凌晨3点 欧冠生死战!谁赢谁进决赛:阿森纳冲击20年纪录

凌晨3点 欧冠生死战!谁赢谁进决赛:阿森纳冲击20年纪录

叶青足球世界
2026-05-05 16:43:25
刚做好10斤卤牛肉,老公说他哥嫂20分钟就到,我立马打包藏好一半

刚做好10斤卤牛肉,老公说他哥嫂20分钟就到,我立马打包藏好一半

千秋历史
2026-02-02 20:19:53
劳动性所得统一征税!国家新明确:未来五年,税收将迎来8大变化

劳动性所得统一征税!国家新明确:未来五年,税收将迎来8大变化

学税
2024-07-23 15:25:30
郑丽文:统一就要尊重2300万台湾人的意愿,不能把刀架在脖子上!

郑丽文:统一就要尊重2300万台湾人的意愿,不能把刀架在脖子上!

阿龙聊军事
2026-05-05 11:00:28
女演员宣布:已产下一个大胖小子!

女演员宣布:已产下一个大胖小子!

喜欢历史的阿繁
2026-05-05 00:04:32
她是王洪文亲信,曾任上海市委书记,1982年被判处17年有期徒刑

她是王洪文亲信,曾任上海市委书记,1982年被判处17年有期徒刑

锅锅爱历史
2026-04-29 01:31:20
申花4个失球有3个是超级失误,泰山赢了一场“不该赢”的比赛

申花4个失球有3个是超级失误,泰山赢了一场“不该赢”的比赛

金风说
2026-05-06 00:34:04
2026-05-06 05:23:00
侃故事的阿庆
侃故事的阿庆
几分钟看完一部影视剧,诙谐幽默的娓娓道来
532文章数 8372关注度
往期回顾 全部

科技要闻

传苹果考虑让英特尔、三星代工设备处理器

头条要闻

媒体:中国史无前例下"阻断禁令" 美媒迅速捕捉到信号

头条要闻

媒体:中国史无前例下"阻断禁令" 美媒迅速捕捉到信号

体育要闻

全世界都等着看他笑话,他带国米拿下冠军

娱乐要闻

内娱真情谊!杨紫为谢娜演唱会送花篮

财经要闻

浏阳烟花往事

汽车要闻

同比大涨190% 方程豹4月销量29138台

态度原创

家居
数码
本地
时尚
公开课

家居要闻

灵动实用 生活艺术场

数码要闻

Sharkoon推出8kHz无线鼠标SKILLER SGM70W,提供玻璃脚贴

本地新闻

用青花瓷的方式,打开西溪湿地

衣服不用准备太多,找到一些实用的单品才最重要,百搭又有性价比

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版