关键词不能为空

当前您在: 主页 > 英语 >

ARM经典问题.

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-03-03 12:46
tags:

-

2021年3月3日发(作者:第二天早上)



101



:


Q:


单步调试


i2cINT.C



ISendStr


中启动总线后< /p>


,


程序怎么又跑到


vectors.o



,


进行初



始化了呢



A:


由于


VIC

的限制


,


程序不能在


0x18 < /p>


停下来


,


否则执行非向量中断

< p>
.


如果没有设置


,


则非< /p>



向量中断为


0,


将从


0


地址执行


.


建议


:


有中断时不要单步执行程序

< br>,


可以手动暂时关中断或设置断点代替单步


.


(


编者注


:


下载最新的 驱动可以解决这个问题


)



102



:


Q:


请 教


:


如何修改



ADS


的启动代码


,



__main



main ,


按道理应该有一个文件


,


修改这



个小文件


,


就可以修改



启动代码


.


A:__main



ADS


运行库

,


最好不要修改


,


要是不使用库就 不要用


main()


函数


,

< p>
起个别的名




.


直接跳转过去就行了


.


详见


:



ARM


体系结构与编程》


P328.



103



:


Q:


我在


JTAG

< br>仿真时出现的对话框


,


提示


:


Warnning! interrupt vectors data is not correct!


Program you downloaded can not run freely!


A:


参见《


ARM

< br>微控制器基础与实战》附录一第一个问题的第二部分


,


选 择源代码的启动代



码文件夹下的


ve ctors.s,


并参照《


ARM


微控制器基础与实战》图


7.11


设置


.



104



:


Q:


初始化代码中分配堆栈的问题



MSR CPSR_c, #0xd3 ;


进入特定的处理器模式



LDR SP, StackSvc


给当前处理器模式的堆栈指针赋值


,


这只是一个值而已


,


;


他在接下去的


DCD


语句赋值



SvcStackSpace SPACE SVC_STACK_LEGTH * 4


这个语句开辟一个


SVC_STACK_LEGTH * 4


大小的内存


,SvcStackSpace


是这块内存的标



< br>,


我想应该就是内存的首地址


,


这样应该好理解了


.


StackSvc DCD SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4


这个语句就是把这个首地址加上堆栈大小值


.


A:


计算出堆栈指针来


,


我想 这个堆栈是向下生长的


,


所以


SP


赋值的是堆栈地址最高的那个


.



105



:


Q:


请问启动代码中这句是什么意思



24


__user_initial_stackheap


LDR r0,=bottom_of_heap


MOV pc,lr


;


AREA Myheap, DATA, NOINIT, ALIGN=2


bottom_of_heap SPACE 256


库函数的堆空间



我的问题是


:


1.


这个函数在哪里被调用



2.


赋值给


r0


以后就完事了



r0


起什么作用



A:

堆和栈的分配函数


,



ADS < /p>


提供的初始化代码调用


,


具体参考配套《


ARM


微控制器基础



与实战》的相关部分


.



106



:


Q:2104


的启动代码是否适用


2124




网站上下载的那个


easyarm2104


工程模版里面写着


arm executable imag for lpc21**,


是否说也适用


2124




如果不行


,


哪些地方需要修改



希望能够指点一下


!


A:


您可以下载


2100


的工程模板


.



107



:


Q:


我在用


ARM



IAP


功能


,


要把已经烧到


flash


中的数据写到


RAM



,


我是这么写的


:


uint32 *q,data;


q = 0x00006000;


data = *q;


这是要读的


flash


的起始地址< /p>


,


但是第二句编译出错


,


我想应该是


C


编译器不许给指针



直接赋值


,


我用汇编解决了这个简单 的问题


,


但是怎么用


C


来解决呢



A:q = (uint32 *)0x00006000;



108



:


Q:


问一个有关汇编的基础问题


.


例程


: ANDS R1,R1,#0x0400


BEQ W


AITOK


请问



ANDS

是如何影响标志位的


,



BEQ


判断的是那两个操作数相等时执行



A:R1&0x0400 => R1,


若结果为


0(



R1


< p>
0),


则标志位


Z=1.



Z=1



,BEQ W


AITOK


有效执行


.



109



:


Q:


请 教


:



ADS


中怎么给某个变量确定固定物理地址



就是类似


KEIL


中的



XDA


TA xxx _AT_ 0x4456


的功能


.


A:


使用分散加载机制


,mem_


等就是例子


.


25



110



:


Q:


哪里有介绍


ARM



C


语言编程的



A:


其实大多数嵌入式系统的


C


语言都差不多


,


可找一本写嵌入式


C


语言的书即可


.



111



:


Q:


请 问在系统复位后首先执行的是否为


Boot Block


的中断向量



然后由


boot block


里面的程序决定是执行用户程序还是


ISP


程序


.


那么这时启动的


boot block


里的中断向量表和用户程序里的中断向量表是如何在


flash


里安排的



在《


ARM


微控制器基础与实战》上看到的是复位后


boot


扇区的最低


64


字节出现在



0x00000000


区域


,


那用户的中断向量表应该在哪个 区域



产品中一般为


0x000000 00,


在开发板中重启后实际为


boot block


的中断向量地址


,






A:


看一看


3.3.6



.


产品中一般为物理


0


地址处


.



112



:


Q:



ARM


微控制器基础与实战》上有一段程序


:


uint32 i;


i = VICIRQStatus;


i = IOSET;


请问


:


为何先要读取


VICIRQStatus


的 值


,


才能读


IOSET


的值



A:


读出


VICIRQStatus


只是为了方便观察当前


VICIRQStatus

< p>
的值


,


没其它用途


.



113



:


Q:


请 问处理器在什么情况下处于用户模式



多谢


!


A:


需要你去设置


CPSR


寄存器


.


用户程序前台程序一般在用 户模式


/


系统模式下运行


.



114



:


Q:



EINT1_LED.S


中的倒数第二行有一个单独的


B


指令


,


它是什么含义



多谢


!


A:




跳转到当前地址


,

< br>即死循环


,


与以下代码等效


:


HALT B HALT



115



:


Q:


模板里到底有些什么


< p>
A:


起动代码


,


相关编译 链接设置


.


起动代码是用来初始化系统的程序


,



Startup.s,target.c,sta ck.s


等等


.


26



116



:


Q:


今 天试用了工程模板


.


使用了


ARM Executable Image for lpc21xx


建了个项目

< p>
,


看了下



启动文件与原 来的不同了


,


用了个《


ARM


微控制器基础与实战》上的例程来作试验


,




的是


time0

< br>定时中断来亮灯的程序


,


用的例程的

TargetInit()



int main(void);


修改了用户堆栈和


bottom_of_heap

< p>
的长度


,


程序能运行


,< /p>


但不能产生中断


,time0



VIC


初始化的是正确的


,


是什么原因



用工程模板建立的项目文件夹的


src


中多了几个文件


,


其中的



mem_,mem_,mem_,


怎样才能导入到项目中来



谢谢


!


A:


原来


startup.s


默认是关了中断的


!



117



:


Q:



easyarm 2104


的配套光盘中的


IAP


例子中


,


定义了一个函数指针



void (*IAP_Entry)(uint32 param_tab[], uint32 result_tab[]);


我看不懂


,< /p>


这个函数和普通的函数定义方法不一样


,


尤其是


(*IAP_Entry),


大家教教我


.


A:


这是一个指向函数的指针


!!



118



:


Q:


变量定义中


volatile


是什么意思



请大侠告诉我一下《


ARM


微控制器基础与实战》上


c


语言定义 变量时出现了


volatile,


不知道是做什么用的


.C


语言里好像没有这个语法阿


!


A:


告诉编译器不要优化掉


,volatile


是易变的意思


.



119



:


Q:


请问


ARM


中的一个编译方面碰到的问题


.



ARM


地汇编语言中


,


有条件编译伪指令


IF..ELSE...END IF;


而在


C


语言中


,


有相应的条件编译伪指令


#IF...#ELSE ...#ENDIF,


在较大的程序设计中


,


往往需要对整个程序进行条件编译


.


我要问的问题是


:


我在


CONFIG< /p>


.H


中设置一个编译开关


,

< p>
对所有的


C


文件进行条件编译是



有效的


,


因为每个


C


文件中都有一个语句


:#include


我如何将该编译



开关的信息传递给汇 编语言文件


,



VECYORS.S


A:


好像没有直接的方法


,

< p>
可以编写一个


CONFIG


.INC


来管理汇编程序的配置


.


27



3




操作系统




120



:

-


-


-


-


-


-


-


-



本文更新与2021-03-03 12:46,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/700030.html

ARM经典问题.的相关文章