[国嵌攻略][044][初始化Bss段]

BSS段的作用

1.变量存储的空间

初始化的全局变量:数据段

未初始化的全局变量:BSS段

局部变量:栈

动态分配变量:堆

2.为什么要对BSS段初始化

未初始化的全局变量在使用时才被赋值,未了避免在使用时忘记赋值,导致使用随机值。由系统工程师在系统启动时,把BBS清零。

初始化BSS段

找到BSS段起始地址和结束地址向其中填零,BSS段地址记录在链接器脚本中

/*
*名称:init_bss
*功能:初始化BSS段
*/
init_bss:
	ldr r1, =bss_start
	ldr r2, =bss_end
	mov r3, #0

loop_bss:
	cmp r1, r2   //如果BSS段起始地址等于结束地址,那么结束循环
	beq end_bss

	str r3, [r1], #4   //清零BSS段对应地址的值,然后让该地址加4字节
	b loop_bss

end_bss:
	mov pc, lr
时间: 2024-10-11 14:51:10

[国嵌攻略][044][初始化Bss段]的相关文章

[国嵌攻略][043][栈初始化]

栈概念 栈是一种具有后进先出性质的数据组织方式.栈底是第一个进栈的数据所处的位置,栈顶是最后一个进栈的数据所处的位置 满栈和空栈 根据sp指针指向的位置,栈可以分为满栈和空栈: 1.满栈,当堆栈指针sp总是指向最后一个压入堆栈的数据 2.空栈,当堆栈指针sp总是指向下一个将要放入数据的空位置 3.ARM采用满栈 升栈和降栈 根据sp指针移动的方向,栈可以分为升栈和降栈: 1.升栈,随着数据的入栈,sp指针从低地址到高地址移动 2.降栈,随着数据的入栈,sp指针从高地址到低地址移动 3.ARM采用

[国嵌攻略][067][tftp协议分析]

TFTP作用 用于网络下载,TFTP客户机在TFTP服务器中下载文件. TFTP交换过程 1.配置TFTP服务器 vim /etc/xinetd.d/tftp 2.交换过程 客户端发请求包到服务器 服务器发数据包到客户段 客户端发相应包到服务器 TFTP报文格式 操作码 1 请求报文 2 写入报文 3 数据报文 4 应答报文 5 出错报文

[国嵌攻略][087][多线程程序设计]

线程概念 1.线程就是轻量级的进程. 2.线程与创建它的进程共享代码段和数据段. 3.线程拥有自己独立的栈. 线程特点 线程可以和进程做相同或不同的工作,但是与进程共享资源. 线程互斥 在实际应用中,多个线程往往会访问同一个数据或资源,为避免线程之间相互影响,需要引入线程互斥机制,而互斥锁(mutex)互斥机制就是其中一种. thread.c #include <pthread.h> #include <stdio.h> #include <unistd.h> pthr

[国嵌攻略][164][USB驱动程序设计]

USB驱动模型 1.USB host controller driver(主控器驱动):为USB主控制器提供驱动程序 2.USB core(USB核心):连接USB主控制器驱动和USB设备驱动 3.USB client driver:为USB外部设备提供驱动程序 USB设备模型 device(设备)->config(配置)->interface(接口)->endpoint(端点),构成了USB设备的四个层次.一个usb driver(驱动)对应的是一个interface(接口).一个接口

[国嵌攻略][061][2440LCD驱动设计]

LCD初始化 1.引脚初始化 2.时序初始化 VBPD(vertical back porch):表示在一帧图像开始时,垂直同步信号以后的无效的行数 VFBD(vertical front porch):表示在一帧图像结束后,垂直同步信号以前的无效的行数 VSPW(vertical sync pulse width):表示垂直同步脉冲的宽度,用行数计算 HBPD(horizontal back porch):表示从水平同步信号开始到一行的有效数据开始之间的VCLK的个数 HFPD(horizon

[国嵌攻略][136][DM9000网卡驱动深度分析]

网卡初始化 1.分配描述结构,alloc_etherdev 2.获取平台资源,platform_get_resource 2.1.在s3c_dm9k_resource中有相关的资源 2.2.add地址由CS4和ADD2决定,是20000000 2.3.dat地址由CS4和ADD2决定,是20000004 2.4.中断资源是EINT7 3.虚拟地址映射,ioremap 4.读取芯片类型 5.设置操作函数集 6.读取MAC地址 7.注册网卡驱动,register_netdev 8.启动发送队列,ne

[国嵌攻略][122][按键定制器去抖]

按键抖动 按键所用的开关为机械弹性开关,当机械触点断开.闭合时,由于机械触点的弹性作用,开关不会马上稳定地接通或断开.因而在闭合及断开的瞬间总伴随有一连串的抖动. 按键去抖动的方法主要有两种,一种是硬件电路去抖:另一种就是软件延时去抖.而延时去抖一般又分为两种,一种是for循环等待,另一种是定时器延时.在操作系统中,由于效率方面的原因,一般不允许使用for循环来等待,只能使用定时器. 内核定时器 Linux内核使用struct timer_list来描述一个定时器: struct timer_l

[国嵌攻略][070-095][Linux编程函数手册]

第1类 时间编程类 1.1 获取日历时间 1.1.1 函数名 time 1.1.2 函数原形 time_t time(time_t *t) 1.1.3 函数功能 返回日历时间 1.1.4 所属头文件 <time.h> 1.1.5 返回值 成功:日历时间失败:-1 1.1.6 参数说明 t:不为空的情况下保存返回值   1.2 获取格林威治时间 1.2.1 函数名 gmtime 1.2.2 函数原形 struct tm *gmtime(const time_t *timep) 1.2.3 函数功

[国嵌攻略][050][2440按键中断编程]

程序结构优化 1.把不同的功能放到不同的文件里面 2.一般在bootloader中不使用MMU,所以关掉MMU 按键初始化 1.打开开发板的原理图,找到按键 2.把对应的GPIO配置成中断,对中断源进行初始化 初始化中断控制器 1.SUBMASK和MASK必须要保证没有屏蔽中断,GPIO是不属于子中断,所以不用设置SUBMASK,MODE和Priority保存默认值即可,设置INTMSK(0x4A000008) 2.EINT4_7对应4个中断,分开设置需要设置EINTMASK(0x560000A