嵌入式学习笔记(一)

32位系统内存划分

4G ----------------------------------
    
		内核空间
    
3G ----------------------------------
     | 堆区     malloc/free   程序员手动分配/手动释放
     |----------------------------
     | 栈区 系统自动分配,自动释放
     |   1. 局部变量
     |   2. 函数的参数
     |   3. const修饰的局部变量,可以通过指针进行修改
     |----------------------------
用户 |		| .bss 段 未初始化的全局变量
空间 ||   static修饰的未初始化的变量(全局变量/局部变量)
     |		|--------------------
     || .data 段 初始化的全局变量
     |		| static修饰的初始化的变量(全局变量/局部变量)
     ||--------------------
     |		| .rodata 段 常量
     |		|	使用const修饰的全局变量
     |		|-------------------- 
     |		| .text 段 只读
0G ----------------------------------

map.lds文件中内容分析

/* 链接脚本文件 : 给编译器使用,告诉编译器如何对代码代码进行处理 */

/* 输出格式 : 32位 ELF格式 小端存储 */

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/

/* 输出的架构 : ARM架构 */
OUTPUT_ARCH(arm)


/* 程序的入口 : _start */
ENTRY(_start)


/* 段 */
SECTIONS
{
 . = 0x00000000;  /* 指定程序的入口地址为0x0地址 */
 . = ALIGN(4);  /* 代码对齐 */
 .text      :  /* 代码段 */
 {
  ./Objects/start.o(.text) /* 将start.o放到代码段最开始的位置*/
  *(.text) /* 其他的.o文件,编译器看着排布 */
 }
 . = ALIGN(4);
    .rodata :   /* 只读数据段 */
 { 
  *(.rodata) 
 }
    . = ALIGN(4);
    .data :   /* 数据段 */
 { 
  *(.data) 
 }
    . = ALIGN(4);
 __bss_start = .;  /* 标识bss段的起始地址 */
    .bss :   /* bss段 */
    { 
  *(.bss) 
 }
 __bss_end__ = .; /* 标识bss段的结束地址 */
     /* 用于对bss段的清0操作*/
}

start.s文件中内容的分析

.text	@ 伪操作,给编译器使用,不占用代码段的空间

	@ 告诉编译器,以下为程序的代码段

-------------------------------------------------------
.globl _start   @ 伪操作,给编译器使用

		@ 将_start声明为全局的,可以被外部的文件使用

-------------------------------------------------------------
			
_start:		@ 标签,类似于C语言中的函数名

		@ 标签可以用来表示函数的入口地址
--------------------------------------------------------------
	mov r0, #0xFF  

	@ 汇编指令,编译器将其编译生成32位的机器码,占用代码段的空间

	@ 功能:将0xFF赋值给R0寄存器
-----------------------------------------------------------------
	stop:	@ 标签

		@ 轮询处理各种事件,比如led灯,蜂鸣器,风扇
------------------------------------------------------------------
		b stop	@ 汇编指令

			@ 功能:跳转到stop标签下的第一条指令指向

			@ 等价于while(1){}死循环
---------------------------------------------------------------
	
	@ 在裸机开发中,必须有一个死循环,

	@ 否则程序有可能会跑飞

.end	@ 伪操作,给编译器使用,表示代码段结束

CPU的组成和作用

CPU,全称为中央处理器,是计算机的核心部件之一,
负责执行计算机指令和控制计算机的操作。
CPU的主要功能是解释计算机程序指令并执行这些指令,
它是计算机的“大脑”。
CPU的工作原理是将指令和数据从内存中读取到CPU内部的寄存器中,
然后对这些指令和数据进行处理,最终将结果写回内存或输出到外设。
CPU的性能主要由时钟频率、指令集、缓存等因素决定。
在实际应用中,为了提高计算机的效率,
CPU会采用中断、分时、多任务等技术来实现多个程序的并发执行。



CPU的主要组成部分包括运算器和控制器。
其中,运算器用于执行算术和逻辑运算,
而控制器则用于控制程序的执行和数据的传输。
除此之外,CPU还包括寄存器、缓存、时钟等部分。
寄存器用于暂时存储数据和指令,缓存则用于提高CPU的运行效率,
时钟则用于控制CPU的工作频率。
总的来说,CPU是一块超大规模的集成电路,
是一台计算机的运算核心和控制核心。
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值