把sql delete 触发器语句放在前面就没问题,放在最后就触发一个断点,大虾帮解答为什么?

arm开发问题解答
IRQ_Exception(void){while(1); }看反汇编,连续单步运行的最后,然后总是走到下面的代码中xb9205f80] stmltdb r0!,{r7-r12,r14}接着就跑到IRQ_Exception进入死循环,既使接着再全速运行也无作用,程序已死在上面的循环中.不知道怎么回事,请陈工指教,Flash中写入的是RomCode,不是RomCode_ex1目前在中断打开的情况下,EASYJtag会单步会进入中断。而VIC的硬件决定如果程序在0x停下会出错。所以不能单步调试中断。也就是说无法在2104中单步调试ucos应用程序啦?目前关闭中断就可以单步调试,例如已经进入中断服务程序。 关闭中断,程序就无法进入中断程序了阿系统也没有Tick中断了阿?你说的是在什么时候关闭中断?设置的断点前加一个关闭中断语句?您可以在中断服务程序中设一个断点,然后全速执行。我不是要调试中断程序,是要调试RAM中的应用程序阿,但是断点单步进入,一会儿就进入刚才那个中断了.那就暂时关闭中断再问一个中断的问题假如我使用REMAP功能, 这样IRQ中断后虽然跳跃到0x,实际是跑到0x地址,这种情况下单步会不会出错? 以前我调试的时候都是整个程序灌到RAM中,也单步过含有IRQ的程序,但是印象中没有碰到这个错误情况.实际地址还是0x只是内容与0x一样而已。情况是一样的。****************************************************************************************************************************************************************************************************************************************************请问软件中断的区别 在VIC中有SOFT中断VICSOFTINT,而SWI 0x32768也是软件中断,那么他们的区别是什么?VICSOFTINT的中断由谁来产生的?它只有32个中断啊。黄皮书的P280中定义中断向量表,怎么没有用原来的0XB9205F80,而使用NOP?它们的具体计算校验和是怎么算的VIC的软件中断是进入IRQ或FIQ模式,退出前要清零软件中断控制位。而SWI会进入管理模式。P280页的中断向量并没有设计向量表所有32位数据累加和为0,用于调试。**************************************************************************************************************************我想申请一个布尔型变量: 编译报错,是ARM不支持bool还是关键字用错了C语言标准中并没有bool变量。如果某个编译器支持,它可以认为是用typedef定义了它。 **************************************************************************************************************************我是这样理解分别编译的:RAM中的应用程序每调用一次uCOS的系统函数就要产生一次软中断,通过这个软中断去掉用事先固化在flash中的uCOS系统函数.不知是否可以这样理解?可以这样理解。**************************************************************************************************************************问陈工关于UART的一些问题!1、 UART0的线状态寄存器U0LSR中第4位间隔中断BI,“在发送整个字符(起始位、数据、奇偶校验和停止位)过程中RXD如果都保持逻辑0,这产生间隔中断,当检测到中断条件时,接收器立即进入空闲状态”,这句话该如何理解?尤其是前半句以及“空闲状态”到底是什么状态?间隔检查时间取决于U0FCR0,可是U0FCR0没有关于检查时间的说明啊,只是实现正确的UART0的正常操作的啊!2、51单片机串口发送中断发生在发送停止位前,而LPC2104是否发送中断在发送完整个字符后?3、在书附带实例程序“DATARET”中进行了REMAP设置,是否和ADS1。2中ARM linker的设置有关?这样编译后的程序写片在哪儿运行?FLASH or RAM?如果我要在FLASH中调试,那么该如何设置ARM linker以及REMAP呢?请陈工做答,谢谢!1、原文如此,我们也不是特别清楚2、根据配套书的3.8.3节的6判断可能在之后,但不可确定3、REMAP与程序的要求有关,与ARM linker的设置没有直接的关系。以前的老贴有很多REMAP的讨论。关于各种方式的设置请看第七章。**************************************************************************************************************************陈工: 如何解决程序运行.暂停后再运行时定时器不能再次中断的问题?暂停后定时器还在运行(由芯片决定)。如果您设置为中断不清0,则还需要很长时间才再次中断。您可以算一下需要多长时间,保证吓您一跳。**************************************************************************************************************************陈工,临界代码段怎么判断呢?一般使用了共享资源的代码均是。**************************************************************************************************************************土土再问一个问题,下面的代码系统会如何执行呢?难道不是死循环???谢谢__rt_div0B __rt_div0这个代码仅在除法除数为0时执行。此时说明您的程序已经有错误了,还跳出来干什么?**************************************************************************************************************************陈工:在arm c中如何定一个c语言函数的编译的地址?陈工,你好:在ADS1.2中如何定位一个c语言函数的编译地址,我知道在C51中是可以的,但是不知道在ARM c中如何实现?望能见告!!谢谢!!我也不是很清楚。但我想,用“分散加载”应该可以实现。**************************************************************************************************************************保留位的取值在I2CONSET的状态字的描述中,保留位的值应该是0还是1呢?黄皮书中提P181,“当从地址和方向位已发送且接收到应答位之后SI 置位而状态寄存器将显示状态代码对于主模式可能的状态代码为18H 20H 或38H”不知道那位大侠能够,解释一下为什么会出现18H,20H或38H呢?1. 不用理会读出的会保留位,写操作时不要向它写1即可。2. 这是硬件I2C根据总线状态产生的,可以参考LPC932的应用手册上的I2C接口部份。**************************************************************************************************************************设置release:RO Base:0x0, RW Base:0x 然后下载到了flash中。我的问题是:系统重新上电后,RW和ZI数据立即出现在0x处么?(上电前,0x(RAM)应该是没有数据的)RW和ZI数据是怎么出现在0x处的呢?初始化代码__main做的“好事”。在进入调试状态时2104实际已经执行了部分代码。**************************************************************************************************************************哪里能下载到ARM C的编程规范?例如黄皮书中外部中断的实验在用c语言编写中断服务程序时要加上__irq这样的规范!ads自带的ADS_DeveloperGuide_D.pdf 这个问题我曾经也问过,比如象例子中...... 比如象例子中#define VICIRQStatus (*((volatile unsigned long *) 0xFFFFF000)) 等这种类似的定义在标准C及C51中均未有,如果没有例子怎么知道啊!!#define VICIRQStatus (*((volatile unsigned long *) 0xFFFFF000)) 是标准c语言语法支持的,是存储器映射外设的特殊寄存器的标准写法。**************************************************************************************************************************您好,请问调试程序时,一定要下载到ram中才能调试吗?如果我的程序(无uc/os)要是大于16k,是不是不能用该芯片了?flash,64k不也没有用了吗?可以在Flash中调试,除编译参数设置及仿真器设置有一些不同外,其它一样。仿真器要设置为允许擦初。编译参数主要是ro_base、rw_base和entry point的设置。**************************************************************************************************************************关于GUI的问题.有人告诉我,要在液晶上显示图象就要用GUI我想,只是猜想:如果按了某个键后,只需用查表的方式调用FLASH的一些数据,趋动液晶显示这些数据以形成图象就行了嘛.那么还要GUI做什么?我刚入门,还请各位指点如果只要显示简单的图象就可不用GUI.**************************************************************************************************************************请问SPI中的SPCR寄存器中有MSTR这个控制位,其中MSTR是控制SPI为主或从模式,这里的主从模式分别是什么意思,有什么区别。谢谢大家1是不是SPI发送数据时,必须为主模式,而接收数据时,必须为从模主。主模式时都可以收发数据,且只由主机发送SPI总线时钟。**************************************************************************************************************************Warnning! interrupt vectors data is not correct!请问到底怎么回事呢?同一个程序开始一直正常,后来就变这样了,运行也不稳定您修改了异常向量表,或没有按照配套书图7.11设置**************************************************************************************************************************DATARET 里的串口程序为什么丢数(0x00 0x11 0x13) 我把光盘上的DATARET编译后烧到开发板上, 在主机上发8个英文字母如"ABCDEFGH", 从开发板能接受到正确返回的8个字符. 但当主机发送的8个字符中包括0x00 或0x11或 0x13时, 该字符无法返回. 如发送"0x10 0x11 0x12 0x13 0x14 0x15 0x16 0x17"8个字节 主机接收的是"0x10 0x12 0x14 0x15 0x16 0x17"6个字节 除了0x00 0x11 0x13以外 其它ASCII都可正确接受到. 不知大家遇到过没有, 我实在想不明白, 请大家不吝赐教您用哪个程序接收,有一些程序会过滤掉一些字符.例如 vb的串口控件可以过滤0,如果设置了软xoff/xon还会过滤两个字符.**************************************************************************************************************************I/O口电平:可否用+5V接5K上拉来接5V外围逻辑? 一般用什么方法可以双向? 直接接5V逻辑实际情况如何(74HC)? I/O口电平:1:可否用+5V接5K上拉来接5V外围逻辑? (看黄皮好像不行)2:一般用什么方法来实现与5V的逻辑期间接口?3:如果直接接5V逻辑芯片,实际情况会怎样?如果3.3v的芯片声明可以接5v IO,则两者间串一个小电阻就可以了.我们就是这样把5v器件接到lpc2104上的. 但这样的话,3.3向5V系统输出高电平逻辑会不会抗干扰能力很差啊?学习存在这问现象,到不一定是这个引起的~~但这样的话,3.3向5V系统输出高电平逻辑会不会抗干扰能力很差啊?学习存在这问现象,到不一定是这个引起的. 进入调试停下来后,手在板上哗啦一下,8段管就跑得很欢了.所以一般不要5与3.3v混用.**************************************************************************************************************************在ADS中仿真时怎么看到诸如IOPIN之类的寄存器的值?? 在AXD的菜单System Views-&Debugger Internals **************************************************************************************************************************求证一个问题:2104强调其内部复位有延时,整形电路以保证复位可靠,为什么还要用708来专门完成这个工作?不好意思,我自己出钱作项目,想省钱啊!哈哈.而且这两74HC125放这里干嘛得啊? TRST这路信号是干什么的啊?保证复位的可靠性(如窄脉冲、中间电平等)74HC125是为了使板上的复位按键和JTAG仿真器均可复位系统。************************************************************************************************************************** **************************************************************************************************************************请教“初始化堆”?黄皮书365页顶部有:_user_initial_stackheapLDR r0,=bottom_of_heapMOV pc,lr请问该子程序是在哪个文件中调用的?__main **************************************************************************************************************************我运行光盘上原始的IAP程序例子,使用它的project是正常的,但我自己重新建一个目录和project,参数设置按照原来工程的设置,编译出来的 axf文件就是会在运行到第一个 SelSector(1,1)时无法继续下去,我自己的axf文件和光盘上的一样大16KB,究竟是怎么一回事?有一处设置Language Settings里的ATPCS项有什么意义?其他工程好像没有选择这一项,请陈工和HSB赐教.IAP是THUMB指令,如果用户程序是ARM指令,所以调用时需要使用BX指令。则C编译器的ATPCS项要设置“ARM/Thumb interwork...”**************************************************************************************************************************请问陈工两个问题!LPC210X适合开发什么样的产品?最好能具体点,目前有那些成功的案例?能否介绍一二,我想在毕业论题中选用UCOS+LPC2104做一个相关课题,可是不知道做什么好,似乎没有切入点,想开发一个实际的东西,请您指点一下!谢谢!国外好像用它作类似网关的东西(利用它的两个串口)。 不知道贵公司有没有基于该ARM芯片的产品啊?或者有那些好的方案能否推荐一下目前还没有。可以用它作三相电表。 **************************************************************************************************************************请教陈工:黄皮第120页表3.1与第158页表3.51不一致呀?...第120页表3.1中的管脚P0.17~P0.21有“首要JTAG管脚组”的功能(TRST,TMS,TCK,TDI,TDO);而第158页表3.51中的管脚P0.17~P0.21却没有这一功能(“保留”)???这是怎么回事呀?有第120页表3.1的英文资料么?首要JTAG管脚组只能通过硬件选择,不能通过软件选择。 **************************************************************************************************************************U0FCR = 0x81; //使能FIFO 并设置触发点为8字节?是不是指接收到8个字节才产生中断!但是现在我发1个字节也进入了中断就。请问这是为什么?注意还有字符超时中断。 请问我能否设置超时不产生中断呢? 我的理解是不行。**************************************************************************************************************************LDR R0,=PINSEL0中=是什么意思,定义一个内存中一个字节,那么现在PINSEL0前面的=号是取地址还是地址中的内容呢这是LDR伪指令,可用来加载32位立即数或地址,LDR R0,=PINSEL0是将PINSEL0的地址加载到R0中。**************************************************************************************************************************请问在启动代码中target.c中,定义了 void IRQ_Exception(void){while(1); // 这一句替换为自己的代码}和 void FIQ_Exception(void){while(1);}在例子IRQ2_TEST中也是这样用的.我不明白,既然程序中触发了IRQ中断,那怎么会在上面出现死循环的的代码?另外,还注释说"//这一句替换为自己的代码",请问IRQ要完成的功能代码都在主程序中用void __irq IRQ_Eint1(void)写明白了,而这里还可以加什么样的代码呢?这是一个模板函数,你可以使用,也可以不使用。使用时将你的代码写入,然后在向量表中IRQ、FIQ处理跳转到该函数(适用于非向量中断)。你的意思是说,这个函数只适用于非向量中断,而向量中断应该在应用程序中由自己编写,对吗? 不知道这个问题你解决了没有。你说的是对的。是非向量IRQ的入口。你设置的其他的 向量中断 的入口地址会自动装载(看 中断控制器 书)。不过他这里的描述有点让人误解。**************************************************************************************************************************请问陈工一个uC/OS-II移植的问题 在文件Os_cpu_a.s 中的函数OSIntCtxSw中有如下语句:……(1) LDR R4, [R6](2) ADD SP, R4, #68 ;17寄存器 CPSR,OsEnterSum,R0-R12,LR,SP(3) LDR LR, [SP, # --8](4) MSR CPSR_c, #(NoInt | SVC32Mode) ;进入管理模式(5) MOV SP, R4……(6) LDMFD SP!, {R0-R12, LR, PC }^ ;运行新任务黄皮书378页中解释:只所以要(1)(2)是因为“OSTCBHighRdy―&OSTCBStkPtr保存的是任务栈位置,而寄存器恢复后堆栈指针并不指向这,所以要调整新任务堆栈指针。” 可是将堆栈指针调整到“新任务入栈的其它数据(见黄皮书374页图6.3)”处后,除了取出了LR以外并没有做什么,而当执行了(4)后又重新将堆栈指针指向了栈顶(即第(5)句)。我认为可以将(2)省去,直接将(3)改为 “LDR LR, [SP, # 60]”,而当执行完(6)后,堆栈指针就自动指向了“新任务入栈的其它数据”处。这样修改后我运行了EX1_arm例子,正常。请问陈工这利用(3)进行堆栈指针调整的原因是什么?不调整可以吗?谢谢。注意不同模式有不同的SP指针。您这样做会造成内存泄漏,长时间运行会耗尽堆栈而使程序崩溃。**************************************************************************************************************************WDT复位后从地址0开始执行吗?运行程序5.40后,WDT复位后并不是从地址0开始执行,却跑去执行[0x] dcd 0x,并一直执行此语句。如何才能从地址0开始执行????WDT复位后是从0开始执行程序。请在反汇编窗口中的0地址处设置断点观察。如果从地址0开始执行,那么程序将重新运行。LED首先将连续闪50下,但程序根本就跑不到那。如果你要看出那样的结果,不要使用JTAG调试(因为CPU复位,JTAG已不能控制而出错)。设置向量表累加和为0,然后脱机运行。**************************************************************************************************************************看到有些工程的编译设置中没有arm linker甚至其它更多的选项,不知道是在哪里设置的??另外T0MR0 = Fpclk / OS_TICKS_PER_SEC;怎么解释??在UCOS中函数OSTimeDlyHMSM(,,,)真的可以设定精确的定时,比如一秒!!1、配套书虽然没有明说,但仔细看一看设置部分应该知道2、Fpclk:外设输入频率(包括定时器)。OS_TICKS_PER_SEC时钟节拍频率3、关于OS延时精度问题,UCOS中文版第二版说得很清楚,太长,自己看吧。**************************************************************************************************************************问题1、BL LABEL 书上说是LR &= PC-4 PC&=LABEL  为什么LR&= PC-4 ??问题2、黄皮书P38 LDRH R6,[R2],#2 R2=R2+1是书上错误还是因为是半字加载,我觉得应该R2=R2+2啊???问题3、LDR R0,=NUMCOUNT 为什么加等号呢??1、看配套书1.1节及1.6节关于PC的部分2、看勘误表3、看配套书的2.2.1节的9**************************************************************************************************************************我想问一下LPC2104使用通用I/O时访问外部设备时的速度最大是多少,象89C51的是晶振频率的1/12 ,那LPC2104的呢?我在资料上好象没找到。看配套书3.3节,特别注意VPBDIV **************************************************************************************************************************既然option页中的Image entry Point填入的是调试入口地址,那么在实际的程序运行当中它是不会覆盖代码中的ENTRY入口声明的,对吗?仅仅是为了调试的方便.Image entry Point优先。其实代码中的ENTRY是为了确保代码不被优化掉。当程序下载到FLASH里时,Image entry Point还会起作用吗?会。编译器并不知道FALSH的地址。 **************************************************************************************************************************仔细看了附录二:但我想搞清一些必须的问题才好自己设计,我不想带那么多的片子在我的MCU核心板上.1:主从JTAG在功能上有无区别(出去启动条件)2:学习板上的"自动选择"是如何实现的?(因为用的是标准AXD,对PCPRISEC,PCDBGSEL的控制是谁实现的)实现的时序.3:我用仿真模式时,下载代码是主还是从在工作.仿真时是主还是从在工作.1、除了启动条件外没有任何区别。2、学习板上的"自动选择"是由仿真器驱动程序实现的。3、均可。**************************************************************************************************************************__xxx的保留字在哪里可以找到那,其如__irq等ADS_DeveloperGuide_D.pdf(开发者指南)**************************************************************************************************************************先谢谢斑竹,总让你这么回答问题,真是辛苦你了。SWI ox00问题:SWI 后面加的数字是这样定义的:处理器忽略,但出现在指令操作码中,异常处理用它来确定正在请求那种服务。我不太明白异常处理怎么识别它,用什么指令么?麻烦斑竹举个例子。还有ADS中,_swi是不是和汇编的SWI有同样的功能?它的格式是什么样的?是调用它声明的函数就中断,还是在里边加汇编 SWI指令了。 例子可以看我的UCOS/ii的移植的SWI异常部分其他请看配套书6.4.3节。**************************************************************************************************************************1、非向量中断的优先级如何设定?2、我设置了两个外不中断1和2,然而无论1或者是2触发,都进入同一个中断程序,请问这个如何处理。3、那位大侠可以详细的说明ARM的中断处理,谢谢!!!非向量中断之间没有优先级,需要看中断标志判断是哪个中断源产生的中断。**************************************************************************************************************************请问一下 OSIntCtxSw()的问题在include.h中有/* 由于不同情况中断OSIntExit()对堆栈的使用情况不同,必须加上这个宏定义 */#define OSIntCtxSw() \{ \OsEnterSum = 0; \ \}请问是什么用的。/* 由于不同情况中断OSIntExit()对堆栈的使用情况不同,必须加上这个宏定义 */#define OSIntCtxSw() \{ \OsEnterSum = 0; \ \}这个有什么用?编译会出错OSIntCtxSw()不是在os_cpu_a.s吗?看配套书6.4.9节,特别注意最后几段 **************************************************************************************************************************请问陈工:P98,程序2.44,使能/禁能IRQ中断问题?_inline void enale_IRQ(void)2.45:void my_strcpy(const char *src)1:请问_inline是什么意思,我在书中没有看到关于它的解释2:const 和* 是什么意思?3:程序中用CMP ch,#0 做判断,ch什么时候付的值?1、_inline 与C++的inline相同2、复习一下C语言的基础知识3、看一看这条指令前有ch的指令4、ads1.2**************************************************************************************************************************请问陈工,执行一条ARM指令或THUMB指令所需的处理器周期。在黄皮书的指令列表里没有给出啊。因为执行的周期与存储器强烈相关、与流水线强烈相关,所以没有固定的周期,最短的为一个时钟。-----------------------------------------------------------------------------------------------------------------------------请问pl2104开发板上的一个问题使用SPI要用四个管脚,SCK,SSEL,MISO,MOSI,可是给的原理图上的SPI用了SCK,MISO,MOSI和TxD1,而SSEL用在了蜂鸣电路,是笔误还是什么原因?急!SSEL是从机模式下的选择线。在主机模式下时,SSEL不输出片选信号,且不能为低电平,所以只能使用其它口线(P0.8)输出片选。-----------------------------------------------------------------------------------------------------------------------------感觉有点奇怪 我那程序在FLASH之前,在RAM中可以中断正常写FLASH之后,不能够运行我检查以下几点://********************************************************1、使用仿真器看代码是否写入芯片。主要看向量表的代码是否正确。注意是直接看反汇编代码。2、P0.14是否为高电平。为低电平会进入isp程序。应该拔掉JP1跳线帽,KEY1在复位时不能被否按下。可以测量一下P0.14的电平,看板上是否有硬件问题或自己附加的硬件有没有拉低它。 3、编译参数是否设置正确请参考配套书图7.13、图7.24、图7.11。其中图图7.11容易被忽略。如果这样的话,异常向量不是定位于程序开始,写入flash后代码执行肯定错误。4、是否使用我们提供的启动代码如果不是,特别注意保留向量的值。参考配套书的3.2.3节的1和5.1.3节的(3)。如果没有编写异常向量而直接重0地址开始编写代码,写入flash后代码执行肯定错误。5、寄存器MEMMAP的值是否为1。如果为2,则需要在 MEMMAP为1时将从0开始的64个字节拷贝到地址0x。注意是64个字节。MEMMAP为其它值均错误//****************************************************888同时,我调用光盘里面的VIC_test的中断程序,REMAP之后能够在FLASH中运行的!!!我现在有点怀疑是不是“异常向量表vectors中第(6)行:DCD 0xb9205f80”的问题,这个植要不 要改动的呀?我可没有碰她!最后,可能要采用最后的方案了-----------&&&&&&&&&&&&&&&&&&&&6、还查不出电话联系 如果您使用的是我们提供的启动代码,则异常向量表vectors中第(6)行:DCD 0xb9205f80不能修改。如果您改动了启动代码中异常向量表的部分,或是自己的启动代码,则需要相应的修改,原则是使异常向量表的累加和为0。您可以通过JTAG仿真器让程序从0地址运行(此时运不运行与2、4点无关),如果程序运行正常,则下载没有问题。如果运行不正常,则重新下载。中断向量表前8行的反汇编如下:66 Vectors67 LDR PC, ResetAddrVectors [0xe59ff018] ldr pc,ResetA = #ResetAddr68 LDR PC, UndefinedAddrxe59ff018] ldr pc,UndefinedA = #UndefinedAddr69 LDR PC, SWI_Addrxe59ff018] ldr pc,SWI_A = #SWI_Addr70 LDR PC, PrefetchAddr0000000c [0xe59ff018] ldr pc,PrefetchA = #PrefetchAddr71 LDR PC, DataAbortAddrxe59ff018] ldr pc,DataAbortA = #DataAbortAddr72 DCD 0xb9205f80xb9205f80] dcd 0xb9205f80 ._ .73 LDR PC, IRQ_Addrxe59ff018] ldr pc,IRQ_A = #IRQ_Addr74 LDR PC, FIQ_Addr0000001c [0xe59ff018] ldr pc,FIQ_A = #FIQ_Addr是按这样累加么:七个0xe59ff018和0xb9205f80相加0xe59ff018+0xe59ff018+0xe59ff018+0xe59ff018+0xe59ff018+0xbxe59ff018+0xe59ff018 = 0x7FF028 != 0呀各位是如何算的?对不起,有一个例子由于我们的疏忽其累加和不为0,其它正确,代码如下:VectorsLDR PC, ResetAddrLDR PC, UndefinedAddrLDR PC, SWI_AddrLDR PC, PrefetchAddrLDR PC, DataAbortAddrDCD 0xb9205f80LDR PC, [PC, #-0xff0]LDR PC, FIQ_Addr如果不用异常应该可以直接从地址0开始编写代码吧? 4、是否使用我们提供的启动代码如果不是,特别注意保留向量的值。参考配套书的3.2.3节的1和5.1.3节的(3)。“ 如果没有编写异常向量而直接重0地址开始编写代码,写入flash后代码执行肯定错误。”也要保证累加和为0。-----------------------------------------------------------------------------------------------------------------------------在单步运行时,T0TC和T0PC寄存器的值为何不是象仿真8051的TL0值那样按指令所需要的机器周期数加1或加2这是一个很大的问题, JTAG 不支持外围器件的仿真. 也就是说定时器等不受暂停控制.我之前也不明白, 用了 定时器0中断但不自动清零, 结果我跑到中断服务程序中设了断点, 然后再运行, 定时器就不中断了,因为它要跑一整个循环,只到溢出后重新回来... 呵呵, 等苦了我了.-----------------------------------------------------------------------------------------------------------------------------请问周功技术员关于一个51与2104的问题如何设置成像51的P1端口之类的,好比说数码管直接P1口送数据出去一组8位的数据通过程序实现IOSET = WrData && LCM_LSB; IOCLR = ((~(WrData && LCM_LSB)) & LCM_DB);IODIR &= (~LCM_DB); // 总线定义位输入线.ReadData = IOPIN; // 读总线上的数据.IODIR |= LCM_DB; // 总线定义为输出线.// 输出数据.IOSET = WrData && LCM_LSB;IOCLR = ((~(WrData && LCM_LSB)) & LCM_DB);这是我外接 5V 液晶模块中的 8 为并口程序, 5V与 3.3V 总线间串接 470 电阻.GPIO是不是只能设为单向的,好像还没上拉?不是好象,是没有上拉 -----------------------------------------------------------------------------------------------------------------------------zlg移植的ucos在中断屏蔽的代码实现上有问题 ^_^ 中断嵌套的问题, 如果必须嵌套那就要切换模式(不能在IRQ模式了). 看一下51EDA上同样的问题 我发现问题后搜索到的类试问题的答案,确实让解决了我的问题/bbs/dispbbs.asp?BoardID=32&ID=16157&replyID=114111&skin=1按照我们的勘误表上的方法编写中断程序就没有问题。另外还有更好的方法将在下一个开发板上公布。-----------------------------------------------------------------------------------------------------------------------------请问,程序在ram中运行一切正常,但写入flash后经常出现数据访问异常中止,是什么原因?我的一个应用程序,使用了定时器0的捕获输入产生中断来测量脉冲宽度。程序在ram中调试和仿真一切正常。然后我将Vectors.s中的Remap去掉。设置好linker,编译。下载到flash中运行,程序能运行一下,但很快死掉。按开发板上的复位键,程序跑一下又死掉。有时候干脆按复位件程序都跑不起来。用仿真器追踪程序,发现程序进入数据访问异常死循环。晕啊~~~~~~~。反复检查了linker设置没有问题啊!俺想不明白,请陈工或者哪位大虾解答一下。谢谢。为什么下载到flash中时要去掉Remap?Remap只在调试中断时需要么?REMAP 与这个寄存器有关---MEMMAP,这取决于你的程序从哪里读取中断向量。如果你在RAM中调试程序,而你的程序又使用了中断,那么你需要将中断向量表拷贝到0X(如果你的image entry point 是0x)。这就是REMAP.同时需要设置MEMMAP=0X02,使存储器映射模式为用户RAM模式。这样当中断发生时,程序从 0X开始的这个新的向量表中去读取中断向量。不知道我这样解释是否正确。呵呵~~~~~~。其它应注意的几点: 1、是否用我们提供的启动代码?应该用我们的启动代码2、memmap是否正确设置?=2时需要拷贝向量表到0x?)3、是否是ucosII分开编译方案?如果是则需要按照非分别编译的方法重新建立工程。4、用仿真器控制程序是否可以从0地址正确运行?不能则下载错误。折腾了几天,程序就是不能在FLASH中正常运行陈工救急啊。还是这个问题,搞了几天就是不行。我没有使用UC/OS-II。程序写入FLASH后能跑一下,几十秒后死掉。程序死掉后检查了MEMMAP寄存器,值是0x01.启动代码我用的是IRQ中断例程的启动代码。不会是芯片内部的RAM有问题吧?但奇怪的是程序在RAM中跑一点问题都没有啊。又检查了一下,LINKER的设置也没问题啊。实在搞不出来,可以将程序发给陈工给看看可以吗?请问你的电邮是?ucosii写入falsh的例子见连接的资料下载。仿真器设置了允许擦除吗?理论上isp可以下载,jtag就可以下载。实在不行,您可以到我们的分公司让他们帮看一下。-----------------------------------------------------------------------------------------------------------------------------关于OSIntCtxSW 在黄皮书的376页的OSIntCtxSW_1中LDR R4, [R6]ADD SP, R4, #68 LDR LR, [SP, #-8]MSR CPSR_c, #(NoInt | SVC32Mode) MOV SP, R4 LDMFD SP!, {R4,R5}LDR R3, =OsEnterSumSTR R4, [R3]MSR SPSR_cxsf, R5 LDMFD SP!, {R0-R12, LR, PC }^ 请问高手:LDMFD SP!, {R0-R12, LR, PC }^是不是恢复新任务工作寄存器和工作模式,LR寄存器一并得到恢复,那么ADD指令后面的 LDR LR, [SP, #-8]指令是不是可以去掉?两者恢复的是两个不同处理器模式的LR LR值是一样的?看配套书1.5节1.6节。陈工:能不能详细告诉我LDMFD SP!, {R0-R12, LR, PC }^指令恢复到什么模式,其中的堆栈的LR又是恢复到什么模式的LR,盼恢复。看配套书2.2.1节的ldm和stm部分关于^的说明。我没不可能说得比书上说得更清楚。注意“正常”两个子。-----------------------------------------------------------------------------------------------------------------------------精确延时的问题?有时候控制需要精确延时几个uS~~在210X下的精确延时是不是也要算每一条指令的周期数然后再乘记数器?~~是不是同一条指令在ARM7TDMI-S兼容内核下都一样~~~例如:LDR R1,[R2] 需要6个时钟周期SUB R0, R1, R2 需要1个时钟周期是不是所有ARM7TDMI-S内核都一样~~??指令执行时间与指令存储器有关、与流水线有关,不可能精确延时。精确延时必须使用定时器。是不是一条指令执行的处理器时钟数(cclk)是活的~~不固定? 是,而且还与存储系统有关。如果用定时器精确延时几个微秒~那不是很浪费系统资源吗?还有其他方法吗?在确定的存储器中关闭中断时可以精确计算指令执行时间,不过计算比较复杂。-----------------------------------------------------------------------------------------------------------------------------怎么在AXD下看每个C文件编译后的汇编代码~~? 在源代码窗口点鼠标右键,stepping mode 选disassembly。再单步运行一下。----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------μCOS-II 在ARM处理器上的移植要点 μCOS-II 在ARM处理器上的移植要点来源:internet 点击:47 添加时间: 18:20:20 1. 设置OS_CPU.H 中与处理器和编译器相关的代码 /******************************************************************** ** 与编译器相关的数据类型 ********************************************************************* /typedef unsigned char BOOLEAN; typedef unsigned char INT8U; //8 位无符号整数 typedef signed char INT8S; //8 位有符号整数 typedef unsigned int INT16U; //16 位无符号整数 typedef signed int INT16S; //16 位有符号整数 typedef unsigned long INT32U; //32 位无符号整数 typedef signed long INT32S; //32 位有符号整数 typedef float FP32; //单精度浮点数 typedef double FP64; //双精度浮点数 typedef unsigned int OS_STK; //堆栈入口宽度为16 位 #define BYTE INT8S //字节型 #define UBYTE INT8U //为了与uC/OS V1.xx.兼容 #define WORD INT16S // ... uC/OS-II. #define UWORD INT16U #define LONG INT32S #define ULONG INT32U /******************************************************************** * 与ARM 处理器相关的代码 ********************************************************************/ #define OS_ENTER_CRITICAL() ARMDisableInt() /*关闭中断*/ #define OS_EXIT_CRITICAL() ARMEnableInt() /*开启中断*/ /* 设施堆栈的增长方向*/ #define OS_STK_GROWTH 1 /*堆栈由高地址向低地址增长*/ 2. 用C 语言编写六个操作系统相关的函数(OS_CPU_C.C) void *OSTaskStkInit (void (*task)(void *pd),void *pdata, void *ptos, INT16U opt) {unsigned int * opt = /* 因为‘opt‘ 变量没有用到,防止编译器产生警告*/ stk = (unsigned int *) /*装载堆栈指针*/ /* 为新任务创建上下文*/ *--stk = (unsigned int) /* pc */ *--stk = (unsigned int) /* lr */ *--stk = 0; /* r12 */ *--stk = 0; /* r11 */ *--stk = 0; /* r10 */ *--stk = 0; /* r9 */ *--stk = 0; /* r8 */ *--stk = 0; /* r7 */ *--stk = 0; /* r6 */ *--stk = 0; /* r5 */ *--stk = 0; /* r4 */ *--stk = 0; /* r3 */ *--stk = 0; /* r2 */ *--stk = 0; /* r1 */ *--stk = (unsigned int) /* r0 */ *--stk = (SVC32MODE|0x0); /* cpsr IRQ, 关闭FIQ */ *--stk = (SVC32MODE|0x0); /* spsr IRQ, 关闭FIQ */ return ((void *)stk); } void OSTaskCreateHook (OS_TCB *ptcb) {ptcb=//防止编译时出现警告 } void OSTaskDelHook (OS_TCB *ptcb) {ptcb=//防止编译时出现警告 } void OSTaskSwHook (void) void OSTaskStatHook (void) void OSTimeTickHook (void) 后5 个函数为钩子函数,可以不加代码。 3.用汇编语言编写四个与处理器相关的函数(OS_CPU.ASM) (1)OSStartHighRdy();运行优先级最高的就绪任务 LDR r4, addr_OSTCBC 得到当前任务的TCB 地址 LDR r5, addr_OSTCBHighR 得到高优先级任务的TCB 地址 LDR r5, [r5] ;得到堆栈指针 LDR sp, [r5] ;切换到新的堆栈 STR r5, [r4] ; 设置新的当前任务的TCB 地址 LDMFD sp!, {r4} MSR SPSR_cxsf, r4 LDMFD sp!, {r4} ; 从栈顶得到新的声明 MSR CPSR_cxsf, r4 LDMFD sp!, {r0-r12, lr, pc } ; 开始新的任务 END (2)OSCtxSw();任务级的任务切换函数 STMFD sp!, {lr} ; 保存PC 指针 STMFD sp!, {lr} ; 保存lr 指针 STMFD sp!, {r0-r12} ;保存寄存器文件和ret 地址 MRS r4, CPSR STMFD sp!, {r4} ; 保存当前PSR MRS r4, SPSR STMFD sp!, {r4} ; OSPrioCur = OSPrioHighRdy LDR r4, addr_OSPrioCur LDR r5, addr_OSPrioHighRdy LDRB r6, [r5] STRB r6, [r4] ; 得到当前任务的TCB 地址 LDR r4, addr_OSTCBCur LDR r5, [r4] STR sp, [r5] ; 保存栈指针在占先任务的TCB 上 ; 取得高优先级任务的TCB 地址 LDR r6, addr_OSTCBHighRdy LDR r6, [r6] LDR sp, [r6] ;得到新任务的堆栈指针 ; OSTCBCur = OSTCBHighRdy STR r6, [r4] ; 设置当前新任务的TCB 地址set new current task TCB address LDMFD sp!, {r4} MSR SPSR_cxsf, r4 LDMFD sp!, {r4} MSR CPSR_cxsf, r4 LDMFD sp!, {r0-r12, lr, pc} (3)OSIntCtxSw();中断级的任务切换函数 LDMIA sp!,{a1-v1, lr} SUBS pc, lr, #4 SUB lr, lr, #4 MOV r12, lr MRS lr, SPSR AND lr, lr, #0xFFFFFFE0 ORR lr, lr, #0xD3 MSR CPSR_cxsf, lr (4)OSTickISR();中断服务函数 STMDB sp!,{r0-r11,lr} ;interrupt disable(not nessary) mrs r0, CPSR orr r0, r0, #0x80 ; 设置中断禁止标 msr CPSR_cxsf, r0 ;中断结束 ; rI_ISPC= BIT_TIMER0; LDR r0, =I_ISPC LDR r1, =BIT_TIMER0 STR r1, [r0] BL IrqStart BL OSTimeTick BL IrqFinish LDR r0, =need_to_swap_context LDR r2, [r0] CMP r2, #1 LDREQ pc, =_CON_SW 完成了上述工作以后,μCOS-II 就可以正常运行在ARM 处理器上了。-----------------------------------------------------------------------------------------------------------------------------陈工:你的Reset函数中 STMIA SP!,{R1-R7,PC}有什么作用?在Reset函数中的STMIA SP!,{R1-R7,PC}什么意思?ResetBL InitS初始化堆栈STMIA SP!,{R1-R7,PC}BL TargetResetI目标板基本初始化;跳转到c语言入口B __main我怎么感觉好像是多此一举,白白浪费了8个堆栈空间。不知到底有什么精妙之处?请陈工解答!谢谢!您从哪里得到的代码?在哪个例子中?我们的代码应该是没有那一句的。光盘:\实验程序\Gpio_TEST\LEDDISP\Init.s对不起,这是笔误,仅这一个文件有。-----------------------------------------------------------------------------------------------------------------------------请教:我在AXD中能看到TIME0,TIME1,UART等模块的控制寄存器,为什么看不到PWM的寄存器,在哪能看到?一些寄存器不能读,否则时序不对引起执行错误,所以不能看。通用而保险的方法:设全局变量=寄存器,看变量值。-----------------------------------------------------------------------------------------------------------------------------深思大虾帮我看一下移植程序 我按照周立功提供的移植原型改写的,一运行这个程序就跑飞在ATMEL55800上移植OSIntCtxSw ; ADD sp,sp,#24 ;????;; LDR r0,=OSTCBC r0 = &OSCTBCur; LDR r0,[r0] ; r0 = OSCTBCur; STR sp,[r0] ; OSTCBCur-&OSTCBStkPtr = sp 函数原型中没有,??,ATMEL公司的移植有BL OSTaskSwH 可不要 task switch hookLDR r0,=OSTCBC r0 = &OSTCBCurLDR r1,=OSTCBHighR r1 = &OSTCBHighRdyLDR r2,[r1] ; r2 = OSTCBHighRdySTR r2,[r0] ; OSTCBCur = OSTCBHighRdyLDR r0,=OSPrioC r0 = &OSPrioCurLDR r1,=OSPrioHighR r1 = &OSPrioHighRdyLDRB r3,[r1] ; r3 = OSPrioHighRdySTRB r3,[r0] ; OSPrioCur = OSPrioHighRdyLDR sp,[r2] ; sp = OSTCBHighRdy-&OSTCBStkPtrLDMFD sp!,{r0} ; restore SP...MSR CPSR_xsf,r0LDMFD sp!,{r0 - r12, lr , pc} ; Load task‘s context & Run task你可以改成:MSR SPSR_xsf,r0后面用:LDMFD sp!,{r0 - r12, lr , pc}^返回.MSR CPSR_xsf,r0此指令执行后当前模式可能已经更改, 所以后面的 SP 值当然不对了,你查查看.-----------------------------------------------------------------------------------------------------------------------------可不可以这样理解~~? 当程序在RAM中调试的时候~~RAMAP是拷贝自己的代码~~因为MAMMAP=2所以中断异常向RAM区跳转~~当程序在Flash中调试的时候 ~~RAMAP是拷贝了Flash处的代码到RAM中去了~~这样RAM区的前8个字和Flash区的前8个字一样~~这时候~~不管MAMMAP=1还是MAMMAP=2~~程序最终都可以跳转到异常处理函数中去~~因为RAM区的前8个字和Flash区的前8个字一样~~都是跳转到Flash中异常处理函数去的~~~~~痛苦中~~~~高手请指点~~~映射这个词实在难理解~~-----------------------------------------------------------------------------------------------------------------------------256页的“#if(Fcco/Fcclk)==1PLLCFG=((Fcclk/Fosc)-1)|(0&&5);#endif ”小弟不理解,当Fcco与Fcclk的值相等时,由137得出P是小于1的数,这怎样设置呢?谢谢!!对于PLLCFG的设置是对pll的倍频M和分频P参数进行设置,对于M值只要保证Fcclk&=60MHZ就可以了。这样你就可以根据Fcclk= M*Fosc关系计算得到你要设置的M值;对于P值,他只要保证CCO的工作频率在满足的范围内就可以了,我记得CCO工作频率好象释150多MHZ到 300多MHZ,Fcco=2*p*Fcclk,这样你就可以计算出来P值,他的值还是比较灵活设置的,我不知道我说明白没有()&*注:部份文章为网上收录供大家共同学习参考之用,并不代表本站意见。如存在版权问题请马上通知我们,我们将马上删除。}

我要回帖

更多关于 sql delete 触发器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信