您好、欢迎来到现金彩票网!
当前位置:众购彩票 > 分散装入 >

ARM 的分散加载

发布时间:2019-04-23 09:21 来源:未知 编辑:admin

  首先申明我使用的调试软件为ADS1.2,当我们把程序编写好以后,就要进行编译和链接了,在ADS1.2中选择MAKE按钮,会出现一个Errors and Warnings的对话框,在该栏中显示编译和链接的结果,如果没有错误,在文件的最后应该能看到Image component sizes,后面紧跟的依次是Code,RO Data,RW Data,ZI Data,Debug各个项目的字节数,最后会有他们的一个统计数据:

  后面的字节数是根据用户不同的程序而来的,下面就以上面的数据为例来介绍那几个变量的计算。

  {;片内16K RAM的顶端,存放不需要被C library初始化的段。

  end注2:在Stack.o里面会生成名为Stacks的段,段的属性为NOINIT,该属性对应scf文件中的+ZI.该段不需要初始化或者可以被初始化为0.

  在一个Region中,RAM的分配不是按照罗列的顺序来的。要想让汇编中使用的变量有固定的位置,可以把所有汇编文件产生的.o放在同一个Region中。如:

  P1.26有内部上拉电阻,故测量时该引脚会呈现高电平。但是在复位时,它的上拉电阻不起作用,只有外部的下拉电阻起作用,P1.26 = 0V,所以上电后PINSEL2的D3~D0会是0x04(B0100),JTAG有效。

  G18控制板采用LPC2114,每次运行Axd都不会正确调入程序。原因如下:

  有一次是因为已经有一个Axd在运行了,打开第二个Axd,当然不会正确调入程序。

  当然最根本的解决办法是将计算机并口设置为EPP模式。其他地方都按照Default就可以了。

  ARM把“向量表所有32位数据累加和为0”作为有效用户代码的条件,只适用于使用片内程序存储器的时候,片外程序存储器无此限制。

  C语言程序通常需要一段用于初始化的汇编代码,通常存储为Startup.s,它实现的任务通常是:

  关注C编译器:==的优先级确实比&的高,所以,凡牵扯到逻辑的东西,用()确认优先级,以避免出现低级错误。

  2、一定要用Fpclk / fdiv设置,以延时1/fdiv秒。该参数不可以以uS为单位。若Fpclk * us / 1000000在计算中会乘法溢出,不易避免,又无警告,故不可用。

  在片内外设如I2C,UART,T0,T1,SPI的设置过程中,都需要根据Fpclk计算出一些设定值。我讨厌用ARM做除法,所以就用宏来实现,除法在编译时就可以完成。

  首先,所有片内外设的初始化程序都名为:void _xxxInit();。之所以在正式函数名之前加一个_,是为了与宏区别开,不至于误写函数。因为宏的名字与函数名相同,只是全部大写,并且前面没有_。如:

  注意宏里面的表达式,不可写成Fpclk*ms/1000,因为如果这样写,当mS太大时,比如mS=1000, Fpclk*mS=(11059200/4)*1000=0xA4CB8000,算到这一步,编译器认为是溢出(它把计算结果看作是有符号数),只要有溢出的警告出现,设置就不正确。

  定义一个UsrStack,大小都无所谓,把它放在可用物理内存的最顶端。C编译器在编译子程序调用时,会将要保护的寄存器压栈,如:

  这是一个满递减堆栈。即SP指向的单元内的数据是有效的,入栈时先减SP再存数据。

http://philogene.net/fensanzhuangru/77.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有