00. 目录

文章目录

  • 00. 目录
  • 01. 开发环境
  • 02. 概述
  • 03. 库的来源
  • 04. 程序示例一
  • 05. 程序示例二
  • 06. 附录

01. 开发环境

  • 开发板:Tiny4412SDK标准版 「Tiny4412 SDK 1506」
  • 工具:「arm-linux-gcc-4.5.1」 「minicom」 「dnw」
  • 平台:Ubuntu 20.04

02. 概述

libc是Linux下的ANSI C的函数库。

ANSI C是基本的C语言函数库,包含了C语言最基本的库函数。这个库可以根据 头文件划分为 15 个部分,其中包括:字符类型 ()、错误码()、 浮点常数 ()、数学常数 ()、标准定义 ()、 标准 I/O ()、工具函数 ()、字符串操作 ()、 时间和日期 ()、可变参数表 ()、信号 ()、 非局部跳转 ()、本地信息 ()、程序断言 () 等等。这在其他的C语言的IDE中都是有的。

03. 库的来源

libc.a在ARM平台中一般在交叉编译对应的目录中

/usr/local/arm/4.5.1/arm-none-linux-gnueabi/sys-root/usr/lib/libc.a

04. 程序示例一

test.c文件

#include <string.h>int ar[100];int (*print)(const char *format, ...) = (void*)0x43e11a2c;int sum = 0;extern unsigned int __bss_start;
extern unsigned int __bss_end;int main(void)
{int i = 0;//memset((void*)&__bss_start, 0, (int)&__bss_end - (int)&__bss_start);for (i = 0; i < 10; i++){print("ar[%d] = %d\n", i, ar[i]); }print("sum = %d\n", sum);return 0;
}

start.lds文件

ENTRY(_start);
OUTPUT("test");
OUTPUT_ARCH(arm);SECTIONS
{. = 0x40000000;.text : {start.o(.text);*(.text);   }.rodata : {*(.rodata);}. = ALIGN(4);.data : {*(.data);}. = ALIGN(4);__bss_start = .;.bss : {*(.bss);}__bss_end = .;
}

Makefile文件

CROSS_COMPILE = arm-linux-
CC = $(CROSS_COMPILE)gcc
CC_FLAGS = -c -I ./
LD = $(CROSS_COMPILE)ld
LD_FLAGS = -T start.lds -Ttext 0x40008000
OBJCOPY = $(CROSS_COMPILE)objcopy
COPY_FLAGS = -O binary
OBJDUMP=$(CROSS_COMPILE)objdump
DUMP_FLAGS=-D
TARGET=test
LIBS=lib/libc.a
OBJS=start.o led.o lib.o test.o bell.o key.oall: $(OBJS)$(LD) $(LD_FLAGS) $(OBJS) $(LIBS) -o $(TARGET)$(OBJCOPY) $(COPY_FLAGS) $(TARGET) $(TARGET).bin$(OBJDUMP) $(DUMP_FLAGS) $(TARGET) > $(TARGET).disrm -rf *.o%.o:%.s$(CC) $(CC_FLAGS) $<
%.o:%.S$(CC) $(CC_FLAGS) $<
%.o:%.c$(CC) $(CC_FLAGS) $<.PHONY:clean
clean:rm -rf *.o $(TARGET).bin $(TARGET).dis $(TARGET)

测试结果

## Starting application at 0x40008000 ...
ar[0] = 0
ar[1] = -509595648
ar[2] = -481165304
ar[3] = 973078545
ar[4] = -485294077
ar[5] = 348327937
ar[6] = 306323457
ar[7] = 452984827
ar[8] = -503246593
ar[9] = -511634431
sum = -202655882
## Application terminated, rc = 0x0

05. 程序示例二

test.c文件内容

#include <string.h>int ar[100];int (*print)(const char *format, ...) = (void*)0x43e11a2c;int sum = 0;extern unsigned int __bss_start;
extern unsigned int __bss_end;int main(void)
{int i = 0;memset((void*)&__bss_start, 0, (int)&__bss_end - (int)&__bss_start);for (i = 0; i < 10; i++){print("ar[%d] = %d\n", i, ar[i]); }print("sum = %d\n", sum);return 0;
}

执行结果

## Starting application at 0x40008000 ...
ar[0] = 0
ar[1] = 0
ar[2] = 0
ar[3] = 0
ar[4] = 0
ar[5] = 0
ar[6] = 0
ar[7] = 0
ar[8] = 0
ar[9] = 0
sum = 0
## Application terminated, rc = 0x0
DengJin #

06. 附录

6.1 Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary0.pdf

6.2 官方参考: http://www.delorie.com/djgpp/doc/libc/libc_1.html

【ARM】Tiny4412裸板编程之静态库(libc.a)相关推荐

  1. 【ARM】Tiny4412裸板编程之异常(软中断)

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 中断向量表 03. 中断向量表实现 04. 设置Vectors bit 05. 程序示例一 06. 程序示例二 07. 附录 01. 开 ...

  2. 【ARM】Tiny4412裸板编程之异常(中断向量表)

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 异常向量表 03. 异常向量表实现 04. 设置Vectors bit 05. 主函数实现 06. 附录 01. 开发环境 开发板:Ti ...

  3. 【ARM】Tiny4412裸板编程之异常

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 概述 03. ARM处理器模式 04. 异常类型 05. 异常处理 5.1 异常处理伪代码 5.2 复位异常 5.3 未定义指令异常 5 ...

  4. 【ARM】Tiny4412裸板编程之协处理器

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 协处理器简介 03. 获取Main ID 04. 获取CCSIDR 05. 获取SCTLR 06. ID_MMFR3 07. 附录 01 ...

  5. 【ARM】Tiny4412裸板编程之按键(C语言)

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 控制原理 03. 配置寄存器 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准 ...

  6. 【ARM】Tiny4412裸板编程之按键

    00. 目录 文章目录 00. 目录 01. 开发环境 02. 控制原理 03. 配置寄存器 04. 程序示例一 05. 程序示例二 06. 附录 01. 开发环境 开发板:Tiny4412SDK标准 ...

  7. 【ARM】Tiny4412裸板编程之蜂鸣器(C语言)

    00. 目录 文章目录 00. 目录 01. 控制原理 02. 配置寄存器 03. 程序示例一 04. 程序示例二 05. 程序示例三 06. 附录 01. 控制原理 咱们的蜂鸣器在底板上,所以需要看 ...

  8. 【ARM】Tiny4412裸板编程之蜂鸣器

    00. 目录 文章目录 00. 目录 01. 控制原理 02. 配置寄存器 03. 程序示例一 04. 程序示例二 05. 程序示例三 06. 附录 01. 控制原理 咱们的蜂鸣器在底板上,所以需要看 ...

  9. 配置eclipse为ARM嵌入式开发板编程

    配置eclipse为ARM嵌入式开发板编程 1-计算机环境 操作系统:window10 编程软件:Eclipse IDE for C and C++ Developers - 2022-09 Wind ...

最新文章

  1. WEB 测试点总结
  2. 树套树 ---- 树状数组套权值线段树模板题 P2617 Dynamic Rankings 动态第K大
  3. 对于大数据大流量情况下微软架构的水平扩展的遐想(瞎想)
  4. Linux学习总结(四十七)NFS服务配置 上篇
  5. 剑指Offer #10 矩形覆盖(问题分析)
  6. php分列显示,【杂谈】PHP数组怎样按键名完成降序分列
  7. 内存超频时序怎么调_电脑内存条专业科普,内存选购、内存品牌、内存安装、内存时序体质、内存超频频率详细讲解...
  8. java数组整组处理_java – 使它漂亮:同时处理数组
  9. 将所有.java文件修改为.jad文件格式
  10. 这是三篇影响百度17年的技术博客,作者李彦宏
  11. C#导出EXCEL没有网格线的解决方法
  12. html可以用搜狗浏览器打开网页,搜狗浏览器网页不小心关了怎么办?搜狗浏览器恢复页面三种方法...
  13. 成都工业学院(成都无机校/电子机械高等专科学校)百年校庆之行记
  14. 今日头条改版,搜索比重上升,占首屏三分之一
  15. 股票收益率与现金分红行为之间的关系,及半强制分红政策评价
  16. 服务器网页连不上网络怎么回事啊,网络连接正常网页打不开怎么办? dns服务器问题解决[多图]...
  17. Mysql部门培训-入门篇
  18. Python将py文件转换为pyd文件
  19. 什么行业程序员不用996?
  20. 教你用Python写界面

热门文章

  1. 理解C# 3.0的五项主要改进
  2. linux whois rpm,CentOS系统安装whois命令的方法
  3. django新建php文件,在Python的Django框架中创建语言文件
  4. 16 导出pcb各网络的布线长度_PCB原理图常见错误分析
  5. Java黑皮书课后题第5章:5.5(千克与磅之间的互换)编写一个程序,并排显示下面两个表格
  6. 登录注册的基本加密方法(可逆)
  7. python-字符串·文件·集合操作
  8. 滚动条加载功能实现(懒加载)
  9. 编码:隐匿在计算机软硬件背后的语言(7)--存储器组织
  10. MongoDB应用篇