十、增补知识
10.1、一个字节可以表示8位字符,字符真的有256种,128~255表示西欧字符,是不常见,详情见文档。字符相加的时候,会自动转成int型加。
10.2、在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed)char与unsigned char之间的区别。
首先在内存中,char与unsigned char没有什么不同,都是一个字节,唯一的区别是,char的最高位为符号位,因此char能表示-127~127,unsigned char没有符号位,因此能表示0~255,这个好理解,8个bit,最多256种情况,因此无论如何都能表示256个数字。
10.3、为什么在链接时需要一个链接地址?
因为数据是要放在一个模拟地址内存空间的,它要把这个数据先加载到寄存器,才能给cpu使用,那么寄存器怎么知道是哪个内存地址位置呢,是因为在编译时,编译出像ldr r0 0x12345678
,而这个0x12345678就是内存地址,再编译出像ldr r1, [r0]
,这样就可以拿到0x12345678内存位置的数据了
10.4、printf变参
略
10.5、arm-2009q3.tar.bz2这套编译器自带了函数库,比如有strcmp,malloc,printf等,但是有些库函数我们却不能用他们,比如printf,因为这个函数默认是同过屏幕输出的,而我们常用uart调试。感觉malloc也不能用,因为我们不知道内存哪一块做了堆内存,只有系统才知道。
10.6、清bss段:编译器可能已经帮我们做了,只是在重定位那节,因为要重定位那部分内存空间并没有清0,所以要手动编程清bss段。
往期热文:
基础C语言知识串串香(1)
===========我是华丽的分割线===========
更多知识:
点击关注专题:嵌入式Linux&ARM
或浏览器打开:https://www.jianshu.com/c/42d33cadb1c1
或扫描二维码: