【ARM 嵌入式 编译系列 3.7 -- newlib 库文件与存根函数 stubs 详细介绍】

2024-01-22 06:52

本文主要是介绍【ARM 嵌入式 编译系列 3.7 -- newlib 库文件与存根函数 stubs 详细介绍】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


请阅读【嵌入式开发学习必备专栏 之 ARM GCC 编译专栏】


文章目录

    • newlib 库文件介绍
      • 资源使用
      • 平台支持
      • 功能
      • 性能
      • 许可证
      • 兼容性
    • 系统调用函数介绍
    • 系统调用存根 stubs 详细介绍
      • 为什么需要系统调用存根(Stubs)?
      • 常见的系统调用存根
      • 如何实现系统调用存根
      • 如何告知编译器使用自定义存根
    • 存根函数 _write 与 printf 的关系
      • _write 存根函数
      • printf 函数
      • 关系
      • 举例

newlib 库文件介绍

newlib 是为嵌入式系统设计的一种 C 标准库实现,它特别适用于那些没有传统操作系统支持的系统。由于嵌入式系统的资源通常有限,newlib 着重于减少资源使用,同时提供了一组相对完整的 C 标准库函数。

相比于其它版本的标准库,例如 glibc(GNU C Library,用于大多数 Linux 发行版)或 uclibc(微型 C 库,针对嵌入式设备的资源节约替代品),newlib 有以下特点和差异:

资源使用

  • 轻量级newlib 旨在占用尽可能少的 ROM 和 RAM 空间。
  • 可定制性:可以根据需要编译和配置 newlib,以包含或排除特定的库功能,以进一步减少资源占用。

平台支持

  • 跨平台newlib 支持多种处理器架构和硬件平台,尤其是 ARM 和其他常见的嵌入式处理器。
  • 无需操作系统newlib 可用于没有完整操作系统的裸机(bare-metal)环境。

功能

  • 简化的系统调用newlib 提供了系统调用的简化和存根实现(stub),允许用户根据其嵌入式系统的实际情况提供实现。

  • 重定向支持newlib 允许重定向标准输入输出(如 stdinstdoutstderr)到用户定义的设备或文件,这在嵌入式系统中非常有用。

  • 浮点支持newlib 提供了对浮点数操作的支持,尽管在资源受限的系统中可能会选择禁用以节约空间。

性能

  • 针对小型系统优化newlib 的实现偏重于减少资源占用和提高效率,而不是最大化性能。
  • 编译时间优化:可以在编译时进行优化,以适应特定的嵌入式系统需求。

这篇关于【ARM 嵌入式 编译系列 3.7 -- newlib 库文件与存根函数 stubs 详细介绍】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/632180

相关文章

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

C/C++错误信息处理的常见方法及函数

《C/C++错误信息处理的常见方法及函数》C/C++是两种广泛使用的编程语言,特别是在系统编程、嵌入式开发以及高性能计算领域,:本文主要介绍C/C++错误信息处理的常见方法及函数,文中通过代码介绍... 目录前言1. errno 和 perror()示例:2. strerror()示例:3. perror(

Python基础文件操作方法超详细讲解(详解版)

《Python基础文件操作方法超详细讲解(详解版)》文件就是操作系统为用户或应用程序提供的一个读写硬盘的虚拟单位,文件的核心操作就是读和写,:本文主要介绍Python基础文件操作方法超详细讲解的相... 目录一、文件操作1. 文件打开与关闭1.1 打开文件1.2 关闭文件2. 访问模式及说明二、文件读写1.

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

Python3.6连接MySQL的详细步骤

《Python3.6连接MySQL的详细步骤》在现代Web开发和数据处理中,Python与数据库的交互是必不可少的一部分,MySQL作为最流行的开源关系型数据库管理系统之一,与Python的结合可以实... 目录环境准备安装python 3.6安装mysql安装pymysql库连接到MySQL建立连接执行S

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生