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


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.o

all: $(OBJS)
$(LD) $(LD_FLAGS) $(OBJS) $(LIBS) -o $(TARGET)
$(OBJCOPY) $(COPY_FLAGS) $(TARGET) $(TARGET).bin
$(OBJDUMP) $(DUMP_FLAGS) $(TARGET) > $(TARGET).dis
rm -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

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

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

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » 【ARM】Tiny4412裸板编程之静态库(libc.a)
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏