嵌入式相关知识点

嵌入式中小端模式为 低字节存储在低地址,高字节存储在高地址。大端模式为低字节存储在高地址,高字节存储在低地址。

如何判断一个系统为大端模式还是小端模式?  小端模式的数据如何转换为大端模式的数据?


#include
#include
using namespace std;
bool IsLittleEndian()//判断是否是小端模式。是小端则返回true
{
     typedef union
	 {
	     int a;
		 char b;
	 }Type;
	 Type test;
	 test.a=1;
	 return test.b==1;
}
bool IsLittleEndian2()
{
    int a=1;
	return      *((char*)(&a))==1;
}
int LittleEndianToBigEndian(int number)//小端转大端
{
	int temp=0;
	char *p=(char*)&number;
	temp=((*p)<<24)+(*(p+1)<<16)+(*(p+2)<<8)+*(p+3);
	return temp;
}
int LittleEndianToBigEndian2(int number)
{
	
	return (number&0x000000ff)<<24|(number&0x0000ff00)<<16|(number&0x00ff0000)<<8|(number&0xff000000);
}
int main()
{
	if(IsLittleEndian()&&IsLittleEndian2())
	{
	    cout<<"系统是小端模式"<

哈弗结构和冯诺依曼结构

哈佛结构是一种存储器结构。使用哈弗结构的处理器有AVR ARM9 ARM10   ARM cortex m3 等

哈佛结构是一种将程序指令存储和数据存储分开的存储器结构,数据总线和地址总线分开  数据和指令的储存可以同时进行,可以使指令和数据有不同的数据宽度

哈佛结构的微处理器通常具有较高的执行效率。其程序指令和数据指令分开组织和储存的,执行时可以预先读取下一条指令

以下转自:http://blog.sina.com.cn/s/blog_a44094ea01016s09.html

哈佛结构


(英语Harvard architecture)是一种将程序指令储存和数据储存分开的存储器结构中央处理器首先到程序指令储存器中读取程序指令内容,解码后得到数据地址,再到相应的数据储存器中读取数据,并进行下一步的操作(通常是执行)。程序指令储存和数据储存分开,数据和指令的储存可以同时进行,可以使指令和数据有不同的数据宽度,如Microchip公司的PIC16芯片的程序指令是14位宽度,而数据是8位宽度。

与冯.诺曼结构处理器比较,哈佛结构处理器有两个明显的特点:

1、使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存;

2、使用独立的两条总线,分别作为CPU与每个存储器之间的专用通信路径,而这两条总线之间毫无关联。

改进的哈佛结构,其结构特点为:
1、使用两个独立的存储器模块,分别存储指令和数据,每个存储模块都不允许指令和数据并存,以便实现并行处理;
2、具有一条独立的地址总线和一条独立的数据总线,利用公用地址总线访问两个存储模块(程序存储模块和数据存储模块),公用数据总线则被用来完成程序存储模块或数据存储模块与CPU之间的数据传输;

    哈佛结构的微处理器通常具有较高的执行效率。其程序指令和数据指令分开组织和储存的,执行时可以预先读取下一条指令目前使用哈佛结构的中央处理器微控制器有很多,除了上面提到的Microchip公司的PIC系列芯片,还有摩托罗拉公司的MC68系列、Zilog公司的Z8系列、ATMEL公司的AVR系列和安谋公司的ARM9、ARM10和ARM11。


冯·诺伊曼结构

von Neumann architecture),也称普林斯顿结构,是种将程序指令存储器和数据存储器合并在一起的电脑设计概念结构。本词描述的是一种实作通用图灵机的计算装置,以及一种相对于平行计算的序列式结构参考模型(referential model)。

本结构隐约指导了将储存装置与中央处理器分开的概念,因此依本结构设计出的计算机又称储存程式型电脑。

    冯.诺曼结构处理器具有以下几个特点:

必须有一个存储器;

必须有一个控制器;

必须有一个运算器,用于完成算术运算和逻辑运算;

必须有输入和输出设备,用于进行人机通信。



ARM有7个基本工作模式:

用户模式(user)系统模式(system) 特权模式(SVC) 快速中断模式(FIQ)、 中断模式(IRQ)、、数据访问中止模式(abort)、未定义指令中止模式(undef)

1)ARM有哪几个异常类型?

7种异常类型。
 复位异常 数据访问中止异常  未定义指令异常    指令预取中止

软件中断 FIQ(快速中断请求)   IRQ(中断请求) 

 

2)ARM核有多少个寄存器?

3) ARM处理器共有37个寄存器,被分为若干个组(BANK),这些寄存器包括:

4) 31通用寄存器包括程序计数器PC指针),均为32位的寄存器。

5) 6状态寄存器,用以标识CPU的工作状态及程序的运行状态,均为32位,只使用了其中的一部分。

6)什么寄存器用于存储PC和LR寄存器?

R15(PC)、R14(LR)

R14 LR 为链接寄存器当调用一个函数时,返回地址被自动保存到链接寄存器,在函数返回时有效 如果函数是分支的一部分(即函数中又调用另一个函数),则链接寄存器必须入栈(R13

7)R13通常用来存储什么?

ARM处理器中通常将寄存器R13作为堆栈指针(SPARM处理器针对不同的模式,共有6 个堆栈指针(SP,其中用户模式和系统模式共用一个SP,每种异常模式都有各自专用的R13寄存器(SP)。它们通常指向各模式所对应的专用堆栈,也就是ARM处理器允许用户程序有六个不同的堆栈空间哪种模式使用的寄存器最少?

用户模式/系统模式(不用SPSR)

8)在Thumb指令集中,哪些寄存器处于lowgroup?

R0-R7属于低位寄存器。

9)CPSR的哪一个位反映了处理器的状态?

第5位(从0开始),T状态位。
1表示运行在Thumb状态,0表示运行在ARM状态。

10)           所有的Thumb指令采取什么对齐方式?

半字对齐(2个字节)

为什么FIQ的服务程序地址要位于0X1C?

尽可能快,省去跳转指令(FIQ的向量地址是异常中断向量表的最高地址,而异常中断向量表后跟的是程序代码,FIQ的中断服务程序紧接中断向量表存放,中断过程可以节省一条跳转指令)

11)在复位后,ARM处理器处于何种模式、何种状态?

特权模式(SVC)、ARM状态




Cortex-M3是一个 32位处理器内核 内部的数据路径是32位的,寄存器是32位的,存储器接口也是32位的 。CM3采用了哈佛结构拥有独立的指令总线和数据总线,可以让取指与数据访问并行不悖。这样一来数据访问不再占用指令总线,从而提升了性能。为实现这个特性,CM3内部含有好几条总线接口,每条都为自己的应用场合优化过,并且它们可以并行工作。但是另一方面,指令总线和数据总线共享同一个存储器空间(一个统一的存储器系统)寻址空间是4GB。换句话说,不是因为有两条总线,可寻址空间就变成8GB了。
比较复杂的应用可能需要更多的存储系统功能,为此CM3提供一个可选的MPU,而且在需要的情况下也可以使用外部的cache。另外在CM3中, Both小端模式和大端模式都是支持的。
ARMCortex-M3采用哈佛结构 ,并选择了适合于 微控制器应用的三级流水线 ,但增加了 分支预测功能
现代处 理器大多采用指令预取和流水线技术 ,以提高处理器的指令执行速度。流水线处理器在正常执行指令时,如果碰到分支(跳转)指令,由于指令执行的顺序可能会发生变化,指令预取队列和流水线中的部分指令就可能作废,而需要从新的地址重新取指、执行,这样就会使流水线“断流”处理器性能因此而受到影响。特别是现代C语言程序,经编译器优化生成的目标代码中,分支指令所占的比例可达10-20%,对流水线处理器的影响会的更大。为此,现代高性能流水线处理器中一般都加入了分支预测部件,就是在处理器从存储器预取指令时,当遇到分支(跳转)指令时,能自动预测跳转是否会发生,再从预测的方向进行取指,从而提供给流水线连续的指令流,流水线就可以不断地执行有效指令,保证了其性能的发挥。
ARMCortex-M3内核的预取部件具有 分支预测功能,可以预取分支目标地址的指令,使分支延迟减少到一个时钟周期
针对业界对ARM处理器中断响应的问题,Cortex-M3首次在内核上集成了 嵌套向量中断控制器(NVIC)。Cortex-M3的中断延迟只有12个时钟周期(ARM7需要24-42个周期);Cortex-M3还使用尾链技术,使得背靠背(back-to-back)中断的响应只需要6个时钟周期(ARM7需要大于30个周期)。Cortex-M3采用了基于栈的异常模式,使得芯片初始化的封装更为简单。
Cortex-M3加入了类似于8位处理器的 内核低功耗模式,支持3种功耗管理模式:通过一条指令立即睡眠;异常/中断退出时睡眠;深度睡眠。使整个芯片的功耗控制更为有效。
stm32f103 的架构:

AMBA ARM公司研发推出的AMBA(Advanced Microcontroller Bus Architecture)片上总线

AHB( Advanced High-performance Bus)高性能总线   APB(Advanced Peripheral Bus)外设总线

AMBA标准定义了三组总线:AHB(AMBA高性能总线)、ASB(AMBA系统总线)、和APB(AMBA外设总线)。




嵌入式相关知识点_第1张图片

嵌入式相关知识点_第2张图片

嵌入式相关知识点_第3张图片



嵌入式相关知识点_第4张图片

以下转自:http://blog.sina.com.cn/s/blog_a5b8978f0101f39i.html

STM32时钟系统

     在STM32中,有五个时钟源,为HSIHSELSILSEPLL

HSI是高速内部时钟,RC振荡器,频率为8MHz

HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。

LSI是低速内部时钟,RC振荡器,频率为40kHz。

LSE是低速外部时钟,接频率为32.768kHz的石英晶体。

PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。

嵌入式相关知识点_第5张图片


用户可通过多个预分频器配置AHB总线、高速APB2总线和低速APB1总线的频率。AHB和APB2域的最大频率是72MHZ。APB1域的最大允许频率是36MHZ。SDIO接口的时钟频率固定为HCLK/2。
    40kHz的LSI供独立看门狗IWDG使用,另外它还可以被选择为实时时钟RTC的时钟源。另外,实时时钟RTC的时钟源还可以选择LSE,或者是HSE的128分频。RTC的时钟源通过RTCSEL[1:0]来选择。
    STM32中有一个全速功能的USB模块,其串行接口引擎需要一个频率为48MHz的时钟源。该时钟源只能从PLL输出端获取,可以选择为1.5分频或者1分频,也就是,当需要使用USB模块时,PLL必须使能,并且时钟频率配置为48MHz或72MHz。
    另外,STM32还可以选择一个PLL输出的2分频、HSI、HSE、或者系统时钟SYSCLK输出到MCO脚(PA8)上。系统时钟SYSCLK,是供STM32中绝大部分部件工作的时钟源,它可选择为PLL输出、HSI或者HSE,(一般程序中采用PLL倍频到72Mhz)在选择时钟源前注意要判断目标时钟源是否已经稳定振荡。Max=72MHz,它分为2路,1路送给I2S2、I2S3使用的I2S2CLK,I2S3CLK;另外1路通过AHB分频器分频(1/2/4/8/16/64/128/256/512)分频后送给以下8大模块使用:
① 送给SDIO使用的SDIOCLK时钟。
② 送给FSMC使用的FSMCCLK时钟。
③ 送给AHB总线、内核、内存和DMA使用的HCLK时钟。
④ 通过8分频后送给Cortex的系统定时器时钟(SysTick)。
⑤ 直接送给Cortex的空闲运行时钟FCLK。
⑥ 送给APB1分频器。APB1分频器可选择1、2、4、8、16分频,其输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路送给定时器(Timer2-7)2、3、4倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器2、3、4、5、6、7使用。
⑦ 送给APB2分频器。APB2分频器可选择1、2、4、8、16分频,其输出一路供APB2外设使用(PCLK2,最大频率72MHz),另一路送给定时器(Timer1、Timer8)1、2倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器1和定时器8使用。另外,APB2分频器还有一路输出供ADC分频器使用,分频后得到ADCCLK时钟送给ADC模块使用。ADC分频器可选择为2、4、6、8分频。
⑧ 2分频后送给SDIO AHB接口使用(HCLK/2)。


时钟输出的使能控制
    在以上的时钟输出中有很多是带使能控制的,如AHB总线时钟、内核时钟、各种APB1外设、APB2外设等。
当需要使用某模块时,必需先使能对应的时钟。需要注意的是定时器的倍频器,当APB的分频为1时,它的倍频值为1,否则它的倍频值就为2。
   连接在APB1(低速外设)上的设备有:电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3、SPI2、窗口看门狗、 Timer2、Timer3、Timer4。注意USB模块虽然需要一个单独的48MHz时钟信号,但它应该不是供USB模块工作的时钟,而只是提供给串行接口引擎(SIE)使用的时钟。USB模块工作的时钟应该是由APB1提供的。
   连接在APB2(高速外设)上的设备有:GPIO_A-E、USART1、ADC1、ADC2、ADC3、TIM1、TIM8、SPI1、AFIO





你可能感兴趣的:(arm嵌入式相关)