csgo界面很卡:cpu用什么方法在向量表中寻找中断向量?

来源:百度文库 编辑:高校问答 时间:2024/04/28 21:31:50

1. p153,在任何IRQ请求产生之后,微控制器跳转到地址
0x00000018执行代码。对于向量和非向量地址,可以在
0x18放入下面指令:
LDR pc,[pc,#-0xff0]
该指令将VICVectAddr寄存器保存的地址装入PC
但是这时候pc=0x00000018,pc-0xff0=fffff028,而VICVectAddr
的地址是fffff030,这是怎么回事?

2. p159,在复位时拉低DBGSEL时,只有管脚p0.17--p0.31的功
能控制有效是什么意思?

1:就是说本来这个地址(0x00000018)下,应该是放中断服务程序的入口地址的,但是这个地址被装在VICVectAddr寄存器中,所以通过这条指令(LDR pc,[pc,#-0xff0])可转移到VICVectAddr寄存器中
所存放的地址出去执行。就这么简单!
2:。。。。

1. 书上P262页有说明。
ARM7TDMI是三级流水线,PC超前于当前执行的指令8字节。
2. 应该是"只有DBGSEL为低电平时,管脚p0.17--p0.31的功
能控制才有效"

*****************************************************************************************************************************
对于保存非向量IRQ中断程序地址是用寄存器VICDefVectAddr,如果有2个或2个以上的非向量IRQ中断,则如何保存其各个地址。是保存第一个非向量IRQ中断函数的地址,还是其它的呢?如果是第一个,则是否一定要在程序中将多个非向量IRQ中断函数连续书写呢?

请各位帮我看一下,谢谢!

只写一个非向量中断处理函数,在函数内判断是那一个中断源产生的中断,然后分别处理。
如果不想这样做,那么就要使用向量中断了。

*****************************************************************************************************************************
有熟悉ADS这两个问题的吗
1、偶尔打开AXDSEC,总是提示我有.sec文件没有加载,这是个什么文件呢?在遇到这样情况下,我从新设置了CONFIGURE TARGET就没有问题了
2、在AXD下我用FLASH LOADING 来下载HEX文件到FLASH中,为什么状态栏一直显示RUNNING IMAGES?按道理下栽是很快的事情啊
3、每个工程项目中的debug,debugrel,release是什么意思?怎样设置和使用

1、这时ads自身的问题,好像以前我说过。敬意不要从ide直接运行axd,应直接开始菜单运行axd然后从file菜单调入调试文件调试。
2、重新设置并重新下载,再不行重装驱动程序
3、仅优化等级不同,一个名称而已。以前的贴子有说明。

*****************************************************************************************************************************

请问编译器ADS1.2支持c语言中的printf()么?如果能,怎么看结果呢? ]

支持,软件仿真时会在屏幕上看到显示。
**************************************************************************************************************************
我在一个文件key.h中定义了几个全局变量,在target.c和key.c文件中都要用到,main函数在key.c里,target.c里有一段时钟的中断程序,编译时出现这样的语句:Error : L6200E: Symbol key1Ct multiply defined (by Target.o and KEY.o).

Error : L6200E: Symbol keyCt multiply defined (by KEY.o and Target.o).

我又在声明全局变量keyCt前加了extern,还是不行,请问应该怎样解决?Thank you very much!

头文一般仅声明变量,变量定义一般在c文件中。
您还要温习一下C语言的基础知识。
**************************************************************************************************************************
2104在ADS1.2中是否支持位变量,如变量类型为bit

不支持
**************************************************************************************************************************
ads设置问题
在对DEBUGREL设置中:layout设置中的关于PLace at the beginning of image 的2项设置各个是什么意思?我看我们的实验例子中要求object/symbol中写VECTOR.O

主要是设置放在ro_base的模块。
**************************************************************************************************************************
关于程序5.28,UART0的实验2
在程序5.28中我有2个问题:
1、在UART0_ini(uint32 baud,UARTMODE set)函数中有一语句为if(set.parity>4) return(0);set.parity是奇偶校验位,这里为什么是大于4,其值范围为0到3,我觉的应该是if(set.parity>3) return(0);
2、还是在这个程序中,多次出现像if(0x04 == (U0IIR & 0x0F));为什么要这样写,而不是if((U0IIR & 0x0F)== 0x04),如果说这样写是为了能读取U0IIR中的值来清除中断,那为什么在程序中还有
if((0==baud)||(baud>115200))这样写的语句。 这样写的目的是什么呢?

1. 在定义数据结构时已有说明,set.parity为0时无校验,为1时为奇校验,为2时为偶校验。其实为3时为强制为1,为4时强制为0,所以要if(set.parity>4)...

2. 这只是一个编程习惯,如果在写if(i==56)时写成了if(i=56)就逻辑错了。
**************************************************************************************************************************
陈工,请指教I2C等问题!
我的LPC2104目标板上使用的是CAT1161作为复位芯片(带EEPROM,用与保存一些设置参数),其带硬件看门狗,通过SDA线的电平跳变来喂狗,而我又用的是从JTAG进行调试,从JTAG调试过程中不能复位啊,所以要先把“狗”服侍好!您说我该用什么样的方式喂狗呢?是用I2C的总线的启动信号?把SDA线编程GPIO模式,输出跳变电平?

我想应该定时读一下CAT1161。
**************************************************************************************************************************
请问: 关于PWMDAC
我没有查到它的资料,但是书上318页有语句
LDR R0,=PWMDAC
MOV R1,#0x800
STR R1,[R0]

请问哪里有它的介绍??

配套书程序清单5.35的第8行,(地址0x40002f00属于哪个模块?)。
**************************************************************************************************************************
有熟悉ADS这两个问题的吗
1、偶尔打开AXDSEC,总是提示我有.sec文件没有加载,这是个什么文件呢?在遇到这样情况下,我从新设置了CONFIGURE TARGET就没有问题了
2、在AXD下我用FLASH LOADING 来下载HEX文件到FLASH中,为什么状态栏一直显示RUNNING IMAGES?按道理下栽是很快的事情啊
3、每个工程项目中的debug,debugrel,release是什么意思?怎样设置和使用

1、这时ads自身的问题,好像以前我说过。敬意不要从ide直接运行axd,应直接开始菜单运行axd然后从file菜单调入调试文件调试。
2、重新设置并重新下载,再不行重装驱动程序
3、仅优化等级不同,一个名称而已。以前的贴子有说明。
**************************************************************************************************************************

**************************************************************************************************************************
1. p153,在任何IRQ请求产生之后,微控制器跳转到地址
0x00000018执行代码。对于向量和非向量地址,可以在
0x18放入下面指令:
LDR pc,[pc,#-0xff0]
该指令将VICVectAddr寄存器保存的地址装入PC
但是这时候pc=0x00000018,pc-0xff0=fffff028,而VICVectAddr
的地址是fffff030,这是怎么回事?

2. p159,在复位时拉低DBGSEL时,只有管脚p0.17--p0.31的功
能控制有效是什么意思?

1. 书上P262页有说明。
ARM7TDMI是三级流水线,PC超前于当前执行的指令8字节。
2. 应该是"只有DBGSEL为低电平时,管脚p0.17--p0.31的功
能控制才有效"
**************************************************************************************************************************
关于定时器的实验
定时器实验2中,为什么定时器0一直不发生中断。一直在main函数中的while(1)中等待中断的发生。而定时器1却能不断的中断,因为它使LED3不断的翻转电平。程序和光盘上的一模一样,却就是不行,请高手看一下,给我讲一下。

不好意思,我查出来了,我没有在vectors.s中进行memmap操作。
**************************************************************************************************************************
在黄皮书的P132页上说EXWAKE寄存器置位将允许外部中断输入将定时器从掉电中唤醒,但不产生中断!可是在P334页中的例子程序中却是有中断服务程序的阿!而且系统从掉电中恢复出来不需要将PCON寄存器的空闲或掉电设置位清0么?清各位前辈指点!谢谢!

需要中断来唤醒CPU。
唤醒后会自动清除PCON的相关位。
**************************************************************************************************************************
堆栈管理算法
陈版主您好。我是一名51单片机初学者,前几天下载了您编写的Small RTOS(51) V1.20.0.在仔细阅读多遍后,对任务调度时堆栈的管理算法不甚明白,如函数OSTaskStkInit。您能否抽空给解释一下算法。

用类似RTX51 Tiny的技术,可以参考RTX51 Tiny的文档。我记得以前c51bbs上有网友翻译过。另,以v1.21.1为基础的《嵌入式实时操作系统Small RTOS51原理及应用》一书即将出版,上面有详细分析。
**************************************************************************************************************************
请问陈版主ADS1.2可以使用semihosting技术么?

需要仿真器支持(EasyJTAG暂时不支持)。
**************************************************************************************************************************
光盘上的IAPTEST文件夹中的C语言项目例子无法实现,总是跳入中止异常.而汇编的程序正常.问题在哪里?
还有一个问题:
FLASH只能整个扇区的改写,不能只改写几个字节吗?如是我只想修改一个8位的密码也要改写整个扇区,那不是太浪费了!

程序是没有问题,项目中要有4个文件(起动文件及C源程序)。请设置断点调试,查出在哪行程序出现异常。
只能整个扇区擦除编程,用于对较大量的数据进行保存,如果数据量不大以及经常要改动少量数据,那么外扩EEPROM。

具体情形是这样
项目中要有4个文件(起动文件及C源程序)。我设置断点调试,查出在IAPTEST.C中以下行程序出现异常。
EraseSector(1,1); // 擦除扇区
跳入反汇编的:
00000048 [0xeafffffe] b 0x48

有时又可以顺利执行,而不出现异常.

而当执行到:
RamToFlash(0x00002000, 0x40000000, 512); // 写数据到扇区1
这一行必出现异常,进入:
0000015c [0xeafffffe] b 0x15c

您应该是自己建的工程,或不是用DebugRel。
注意C的ATPCS的设置。

你可以自己试一试,我又从光盘上重新拷了一下,还是一个现象.C的ATPCS的设置也没错.
如果你们验试你们的程序完全正确的话,请把你们正确的程序发给我.

我已测试,没有问题。您已经改了ro_base,参数,不可能说没有改变工程。
关键在于ARM C Compiler的ATPCS页要选择ARM/Thumb interworking选项。

ARM C Compiler的ATPCS页ARM/Thumb interworking选项,我选了呀!但我没改ro_base,参数。
我是把你的光盘直接拷到硬盘上,只改变了文件夹的只读属性而已

刚才我再次测试,无论在flash中还是在ram中均没有问题。
我没有跟踪到函数内部去。用我们的工程应该没有问题。自己再找一找原因。还不行我们再把这个工程发给您。另外,您可以通过JTAG烧写芯片吗?

都是光盘上一样的工程,在别人机子上能正常运行,但我在的机子上总是跳入中止.我把ADS重装了也不行.DEPRESS!!
我实在找不到原因,

跳入中止模式说明从非法地址读写数据(数据中止)或从非法地址执行指令(指令中止)。
这一般是编译参数设置不对引起。如果同一个板实验出现这个问题,则几乎可以肯定是编译参数设置不对。如果两个机器使用不同的板,互调板看问题在板上还是在编译上。如果问题在板上,先比较一下板有没有区别(一些人将自己2104环成2106)。如果板一样,到购买处检测一下。

谢谢您的指教.我把两个板在同一个机子上试了,是我的板有问题.请问修理时更换成2106不会带来使用上的麻烦吧?

我们不提供将2104更换为2106的服务。

呵呵,没有说明理由,给人感觉是周立功不会推广2106

因为Easy2104利润已经很低,实际上并不赚钱。如果还需要维护两个产品,公司开支上吃不消。实际上2106和2104就那么一点区别,会了2104就会了2106。
**************************************************************************************************************************

**************************************************************************************************************************
关于IRQ中断向量地址
黄皮书P284倒数第2行:
VICVectAddr0 = (int)IRQ_Eint0;
而P283最后却定义了
void __irq IRQ_Eint0(void);
为何不定义为:
void IRQ_UART0(void)
???

__irq用于修饰IRQ中断函数,函数返回时会恢复CPSR

中断返回与函数返回使用的指令不一样。
**************************************************************************************************************************
可不可以把UART1,不做modem,只当成全双工串口(像UART0那样用)
可不可以把UART1,不做modem,只当成全双工串口(像UART0那样用)?
怎样设置??谢谢!!

可以,对于三线制串口通讯不管CTS、RTS等信号即可
**************************************************************************************************************************
关于中断的问题
如果在一个中断程序A执行的时候,中断B发生了。
但是在程序A中为了不让其他中断嵌套进来,已将其他中断屏蔽掉。那么在A执行完后,B中断程序是不是会被执行。也就是说,B中断在A中断执行的时候只是被挂起,还是根本就不会产生中断(因为中断被屏蔽)。