中断创建邮箱

创建邮箱  时间:2021-01-08  阅读:()

ARM经典300问第1章体系结构第1问:Q:请问在初始化CPU堆栈的时候一开始在执行movr0,LR这句指令时处理器是什么模式A:复位后的模式,即管理模式.
第2问:Q:请教:MOV中的8位图立即数,是怎么一回事0xF0000001是怎么来的A:是循环右移,就是一个0—255之间的数左移或右移偶数位的来的,也就是这个数除以4一直除,直到在0-255的范围内它是整数就说明是可以的!
A:8位数(0-255)循环左移或循环右移偶数位得到的,F0000001既是0x1F循环右移4位,符合规范,所以是正确的.
这样做是因为指令长度的限制,不可能把32位立即数放在32位的指令中.
移位偶数也是这个原因.
可以看一看ARM体系结构(ADS自带的英文文档)的相关部分.
第3问:Q:请教:《ARM微控制器基础与实战》2.
2.
1节关于第2个操作数的描述中有这么一段:#inmed_8r常数表达式.
该常数必须对应8位位图,即常熟是由一个8位的常数循环移位偶数位得到.
合法常量:0x3FC,0,0xF0000000,200,0xF0000001.
非法常量:0x1FE,511,0xFFFF,0x1010,0xF0000010.
常数表达式应用举例:.
.
.
.
.
.
LDRR0,[R1],#-4;读取R1地址上的存储器单元内容,且R1=R1-4针对这一段,我的疑问:1.
即常数是由一个8位的常数循环移位偶数位得到,这句话如何理解2.
该常数必须对应8位位图,既然是8位位图,那么取值为0-255,怎么0x3FC这种超出255的数是合法常量呢3.
所举例子中,合法常量和非法常量是怎么区分的如0x3FC合法,而0x1FE却非法0xF0000000,0xF0000001都合法,而0xF0000010又变成了非法4.
对于汇编语句LDRR0,[R1],#-4,是先将R1的值减4结果存入R1,然后读取R1所指单元的值到R0,还是先读取R1到R0,然后再将R1减4结果存入R1A:提示,任何常数都可用底数*2的n次幂来表示.
1.
ARM结构中,只有8bits用来表示底数,因此底数必须是8位位图.
2.
8位位图循环之后得到常数,并非只能是8位.
3.
0xF0000010底数是9位,不能表示.
4.
LDRR0,[R1],#-4是后索引,即先读,再减.
可以看一看ARM体系结构对相关寻址方式的说明.
3第4问:Q:在程序移植的过程中,什么代码段处于什么样的模式,这可真是一个困扰人的大难题,有没有一种标志或办法能够识别"代码段处于什么样的模式"A:读取CPSR,任何时候都是可以读.
第5问:Q:为什么保护现场时,总是保护R0-R3,R12,为什么不保护R4-R11A:请看一看"ARM-thumb过程调用标准"这个文档.
第6问:Q:请问movR1,#0x00003DD0错误:outoftherangeofoperation是怎么回事情我就是想IODIR=0x00003dd0,汇编就是LDRR0,=IODIRMOVR1,#0x00003dd0STRR1,[R0]编译时候说是超出操作范围A:使用ldr,mov的操作数为8位位图数.
第7问:Q:"在ARM7TDMI(-S)处理器内部有37个用户可见的寄存器:"问题:"用户可见"应该怎样理解这37个寄存器是否是37个不同的物理寄存器,例如R8与R8_fiq应该是两个不同的物理寄存器吧A:用户可见是指用户可以通过程序操作的.
R8与R8_fiq是两个不同的寄存器.
第8问:Q:USR模式,SVC模式,IRQ模式分别有哪些限制A:对于外设操作限制与芯片设计有关.
USR模式不能设置CPSR寄存器.
用户模式下无SPSR寄存器,代码可以为ARM,Thumb.
第9问:Q:请问"在初始化堆栈时就决定了工作模式"是什么意思如何决定工作模式的A:设置CPSR寄存器.
第10问:Q:请问:ARM汇编程序设计中所谓的"文字池"作何理解A:可以理解为常量数组,文字池中保存的是常量,这些常量可以是正常的常量,也可以是地址.
4第11问:Q:为什么在中断向量表中不直接LDRPC,"异常地址".
而是使用一个标号,然有再在后面使用DCD定义这个标号A:因为LDR指令只能跳到当前PC4kB范围内,而B指令能跳转到32MB范围,而现在这样在LDRPC,"xxxx"这条指令不远处用"xxxx"DCD定义一个字,而这个字里面存放最终异常服务程序的地址,这样可以实现4GB全范围跳转.
Q:LDR不是可以全空间跳转的吗《ARM微控制器基础与实战》程序清单5.
3.
A:LDR伪指令通过设置指令缓冲池才能实现全范围跳转,而LDR指令则只能实现4KB范围跳转.
第12问:Q:ARM7TDMI-S和ARM7TDMI有何区别A:ARM7TDMI-S是ARM7TDMI的可综合(synthesizable)版本(软核).
对应用工程师来说,除非芯片生产厂商对ARM7TDMI-S进行了裁减,否则ARM7TDMI-S与ARM7TDMI没有太大的区别,其编程模型与ARM7TDMI一致.
第13问:Q:DCD伪指令的疑惑.
"StackUsrDCDUsrStackSpace+(USR_STACK_LEGTH-1)*4"这句话是什么意思DCD后面的程序标号或数字表达式是何意A:它的内容是初始化递减堆栈的最高地址,看《ARM微控制器基础与实战》2.
3.
2节.
5第2章编译器与语言第14问:Q:00254:UnimplementedRDImessage是什么错误提示我的设置连接都正常,是不是芯片烧了A:是JTAG的问题.
可以先使用ISP操作试试就知道了,如果能ISP,说明LPC2104没有损坏,还能正常运行程序.
第15问:Q:请教:我在调试程序的时候在AXD中出现这样的提示信息:RDIWarning00159:couldnotopenspecifieddeviceport.
我是根据配套教程的步骤设置的.
A:请按照光盘\easyarm_drive\readme.
txt安装驱动程序.
第16问:Q:我用实验程序运行经常出现下列信息!
程序不能下载到目标板.
Warnning!
interruptvectorsdataisnotcorrect!
Programyoudownloadedcannotrunfreely!
A:1.
仿真器配置一定要正确,即"EasyARMConfiguration"设置窗口中的"FLASH"项中选择"EraseFlashwhenneed";2.
向量表累加和要为0;3.
可以先在RAM调试一个程序(运行),然后STOP,再使用File->LoadImage.
.
.
加载要下载到FLASH的调试文件.
第17问:Q:在ADS中是否可以进行软件调试基于UCOS-II的程序A:ADS软件调试只能调试ARM的内核,不能调试外设.
但是取消PLL锁定检测后,可以调试任务切换,最终到空闲任务上.
开始移植时软件仿真是最好的工具.

第18问:Q:ARMulate软件是干什么的2104不是用EasyJTAG.
dll来仿真吗A:软件仿真只能仿真ARM核.
第19问:Q:有关LPC2106.
INC的问题.
我无法在project引用lpc2106.
inc文件,只能引用lpc2106.
h文件,这是什么原因且当我的主程序用汇编编写时,不能引用lpc2106.
h,用lpc2106.
inc则无法加入project,请问汇编器应如何设置A:不用加2106.
inc只要该文件在你的工程文件夹中,就可以直接在汇编程序的开始处加6"include2106.
inc".
注意:该文件是汇编文件定义的头文件,定义内部寄存器.
第20问:Q:入口点是什么意思我在使用LPC2106上移植UCOS-II,每次MAKE时总是提示我Imagedoesnothaveanentrypoint,可是我是把光盘的vetctors.
s复制过来的,而且仔细看了看,已经声明了ENTERY,这是怎么回事A:需要在ADS中设置入口.
第21问:Q:请教:如何定义不被初始化变量A:让编译器不知道有这个内存地址即可.
A:如用分散加载文件分配RAM故意预留一部分RAM不分配,用它来存您不需要初始化的东西.
或者不调用编译器提供的启动代码,不过这样可能编程会麻烦一些.
第22问:Q:我直接通过JTAG口下载EasyArm板带的Ext1_test程序到ARM中,出现中断向量的告警:interruptvectorisnotcorrectarmisnotrunningfreely.
果然复位后芯片不能运行.
但是我用串口下载后芯片能正常工作,中断也行的.

并且我用JTAG仿真的话,芯片能正常工作,中断也行的,唯独JTAG口下载不行.
不知道是什么原因A:仿真器配置中要设置EraseFlashwhenneed.
也可以这样试试:1.
可以先打开一个工程在RAM中调试运行;2.
stop程序;3.
使用File->LoadImage…重新加载Ext1_test生成的*.
axf文件.
Q:仿真器配置中我是设置了EraseFlashwhenneed,但照你说的话,那不是在RAM下调试吗在RAM下调试我是可以的,但是下载后出现interruptvectordataisnotcorrect.
我又看了几篇文章,是不是跟中断向量表的累加和不为零有关系啊A:是的,是向量表的累加和不为零.
因为如果用ISP下载能运行,说明向量表的累加和已为零,而用JTAG下载不能运行的情况可能是没有正常下载代码.
先在RAM中调试,目的是为了后面正确下载程序到FLASH.
第23问:Q:用Scatter怎样将某个函数或文件定位在Flash的某个位置A:参考http://www.
zlgmcu.
com/download/downs.
aspID=10097第24问:Q:我在仿真时遇到这样的提示:Error,Flashisprotectedbyuserconfigation!
怎么写到flash里面呢A:看配套《ARM微控制器基础与实战》附录一.
第25问:Q:我在移植实验中想到了两个问题,如下:1.
Debug和Release以及DebugRel有什么不同,为什么在作2104移植实验时,要用Release2.
在Release中为什么要将RWBase设置为0x40000040我将其设置为0x40003000,为什么不能工作A:都只是一个问题,内存空间的使用,因为跑OS要比较大的内存空间,所以要腾出点地方.
第26问:Q:请问没有MMU的ARM芯片是否支持使用malloc()函数动态分配内存A:是否支持malloc()函数与芯片没有多大关系,主要与编译器有关.
Q:再问:如果没有操作系统支持呢A:也支持.
第27问:Q:在I2C实验程序中,我想查看数据缓冲区DataBuf的值,怎么查看A:watch窗口或鼠标停留在要查看的变量名上.
Q:我查询的是写入DataBuf缓冲区的值,鼠标在上面根本就不会出现他的值,即使在watch中加入,结果也是"namenotfound".
A:变量被优化,调试时可以把该变量定义为全局变量查看.
第28问:Q:仿真软件和2104开发板连接不上DBEWarning00041:!
AnunspecifiedDebugToolboxcallfailed电源和开发板都连好,错误和没接开发板一样,驱动也安装了,安装时按确定键时,软件很长时间才有如上反应,请帮忙A:1.
并口是否正常2.
在其它操作系统(如98)下或其它台式PC下试试.
第29问:Q:如何生成32位hex文件8我在ReleaseSetting->ARMfromELF->OutputFormat中设置为Intel32bitHEX,可是好像没有生成hex文件A:试试这种方法:Target-->TargetSetting-->PostLink中选择"ARMfromELF"加上你上面设的应该不成问题.
第30问:Q:请问关于settings中r0baserwbase的意思A:ro:readonly,rw:readandwrite.
第31问:Q:编译成功后的信息第一行,code,R0data,RWdata,ZIdata,debug分别代表什么A:R0只读段,即程序代码空间;RW可读/写段,即数据变量空间;ZI清零变量段,即需要清零初始化的数据变量空间.
第32问:Q:如何在ADS里面看任务执行的一些情况比如堆栈.
A:多任务环境下的堆栈,内存等信息需要调试软件的支持才可以实现.
ucos下有一个统计功能的模块可以间接实现部分功能.
第33问:Q:请问向flash烧数据时出现:exceedsflashlimitation请予赐教!
A:要写入的flash地址超过了范围.
如果不是代码太大的问题,可以检查scf文件是否正确.
第34问:Q:在LPC2214之类的芯片中如何实现数组的绝对地址定位,比如51的_at_的用法.
A:*((char*)0x40000300)类似访问Q:谢谢,但这样做就无须定义数组变量,访问也不便,还有高招吗A:可以使用分散加载.
第35问:Q:请问ADS编译错误"L6221E:ExecutionregionER_ROoverlayswithExecutionregionER_ZI"该如何解决A:请用我们网站上的工程模板试一试,最大的可能是因为你的RELEASE或者DEBUG选项里面没有正确设置,按照参考《ARM微控制器基础与实战》上面的设置,是不会有这个问题的.
9第36问:Q:请教一下:将程序写入flash,再用从JTAG方式调试写入之后再复位程序没什么反映.
看了很多以前的帖子,说memmap寄存器要为1,我用的是一个很简单的控制led的例子,改动了参数之后写入flash的.
在这个程序的vectors中找不到关于memmap寄存器操作的部分啊,这是怎么回事,该怎么办呢A:《ARM微控制器基础与实战》上附录有"常见问题",列举了几点程序写到FLASH不能运行的原因.
memmap操作可以在target.
c中的TargetResetInit()函数内添加.
第37问:Q:HEX文件.
EASY2100配套《ARM微控制器基础与实战》上讲:把项目编译成HEX文件,我不会呀,咋办A:Target-〉targetsettings设置Post-linker并且设置Linker-〉fromELF.
Q:再问:我用的是光盘里的例子,打开工程项目里是DebugInARM.
DebugInFlash.
RelInFlash.
不是《ARM微控制器基础与实战》上的DebugRel呀,我都照《ARM微控制器基础与实战》上设置的,可用ISP下载,提示无法找到HEX文件.
A:光盘上的例子是用专用工程模板建立,已经设置好参数,与默认模板不同.

第38问:Q:EasyARM2100开发板如何通过JTAG接口下载到Flash我在用EasyARM2100开发板时JTAG接口不能进行Flash中的调试(DebugInFlash),但是可以在RAM中调试(DebugInRAM),且通过ISP编程可以写入Flash.
通过JTAG接口进行DebugInFlash调试时,总是出现如下提示:FlashSector0writefailed!
Warnninginterruptvectorsdataisnotcorrect!
Programyoudownloadedcannotrunfreely!
请问是什么原因我该如何办A:仿真器设置选项有一个允许擦除FLASH的选项,选择它.
第39问:Q:我发现程序在RAM调试时(RO=0X40000000)OK,但是JTAG下载到FLASH(RO=0X00000000),显示如下:Thesessionfile'c:\DocumentsandSettings\jan\default-1-2-0-0.
ses'couldnotbeloaded.
A:这是ADS自身的问题,请不要通过IDE运行AXD,而是通过开始菜单运行,然后Load调试文件调试.
第40问:Q:我有几个问题想问问大家.
10调试主机负责对ARM源程序进行编译链接,最好用什么样的高级语言对ARM源程序进行编译链接使用调试程序(如AXD)进行JTAG调试,AXD是什么调试程序,是否是类似什么软件之类的到哪能下载AXD的调试程序呢怎么样进行AXD程序进行JTAG调试如何通过JTAG仿真器发送到目标机上呢对于单片机的调试,都用到了什么软件都个有什么作用呢A:可以使用ADS1.
2,KeilC也支持.
AXD是ADS的一个组件.
您可以在本公司网站下载EasyARM2100开发套件快速入门看一看.
第41问:Q:EasyARM2100AXD调试时出错,故障现象:按照光盘上的方法设置好ADS1.
2后打开光盘上的expamples\gpio\c\LedDisp的工程文件(从光盘上拷贝到硬盘,已去处只读属性).
编译通过后,按Debug按键运行调试,进入AXD.
按Go按键,EasyARM没有反应.
再按Stop按键.
AXD弹出两个确认框窗口:"Nodisassemblycouldbereadattherequestedaddress".
如果进入AXD直接按Step按键,也是会弹出同样的两个确认框.
软件是光盘上的,没有经过任何改动.
光盘上的程序试过4,5个都是这种情况.
AXD的设置是按照光盘上的说明设置的.
EasyARM上的JP8是断开的.
ADS在出现这种问题后重新安装过,故障依旧.
出现这个问题前,可以调试.
只是单步的时候感觉比较慢.
差不多1-2秒钟才能单步一次.
A:原因找到了,是芯片被加密了,无法写入新的程序,用FLASHISP清除后解决.
加密后JTAG完全不能控制芯片,否则可能被解密.
第42问:Q:我板上的lpc2214开始可以在线编程,只搞了两三次可以把文件写进去.
但我发现P0.
14未置低电平时也进入ISP模式,烧入的文件原来可以ISP下载到2014开发板中运行的.
最后只能读芯片的一些ID,载文件都不能进行.
以下是对整片ERASE时,对串口的捕获,命令返回是19.
SynchronizedSynchronizedOK11059OKU231300P0140E0141119configuretar.
.
.
->ARMUL,只能仿真ARM核外设不能仿真.
第48问:Q:为什么盘中的工程会出错啊A:文件的只读属性去掉了吗第49问:Q:您在2104的《ARM微控制器基础与实战》中提到ucos与应用代码分开编译,在分开编译调试成功之后,最后要将代码统一固化到芯片中.
在最后一步需要注意什么统一编译时感觉要改动很多东西,有没有什么最简单的办法能否详细介绍一下方法多谢!
A:使用我们的工程模板,可在本公司网站下载.
其实不分开编译也可调试.

http://www.
zlgmcu.
com/tools/kaifaban/EasyARM2104.
asp的EasyARM2104开发套件快速入门和LPC210.
.
.
第50问:Q:请问,我的2104板子,通过EasyJTAG仿真时,在AXD上没有文件,而且出现这样"Error,Flashisprotectedbyuserconfigation!
"的提示,这是怎么回事啊在AXD应该打开什么类型的文件啊谢谢啦!
!
!
!
A:在仿真器的配置窗口设置仿真器允许擦除FALSH.
AXD->Options->configuretarget->configure->erase……13第51问:Q:关于arm汇编语言跳转指令的特殊用法.
有如下两条跳转指令:beqlablefbeqlableb其中lable为某段程序的标号,beqlablef表示向前跳转到与当前指令最接近的标号lable处执行,而beqlableb表示向后跳转到与当前指令最接近的标号lable处执行.
在arm汇编中有定义这样的用法吗A:没有.
第52问:Q:我将一段程序从flash从复制到了RAM中,但是因为混合编程中不能直接向PC寄存器中赋值来实行跳转,这样我该如何跳转到这个RAM中的地址呢A:用函数指针.
可参考IAP例子.
第53问:Q:我想详细的了解一下ADS开发工具中的stack.
s,heap.
s和startup.
s中代码的含义,各位高手推荐本书或给解释一下A:开发套件用户指南的第3.
1.
3节有说明.
stack.
s定义了系统模式堆栈的起始地址.
heap.
s为初始化库函数的堆,是按ADS的编译器要求编写的.
startup.
s向量表及初始化代码,是根据CPU来编写的.
第54问:Q:我不知道所选择的C文件到底是用ARM还是THUMB编译的,请大侠指点!
A:看配套《ARM微控制器基础与实战》7.
1,7.
2,7.
3节.
第55问:Q:我重新建立了一个工程,没有用模板,TEST.
C程序在编译的时候提示OS_EVENT没有申明,但是我看了代码,TEST.
C中包含了CONFIG_EX.
H,而congif_ex.
h中又包含了include_ex.
h,include_ex.
h,这两个头文件又包含了ucos_ii.
h,而OS_EVENT是在ucos_ii.
h中申明的,不知道为什么会出现这种错误,能不能给我一个比较合理的目录结构A:请参考我们光盘的目录结构.
最好使用我们的工程模板.
第56问:Q:请问,我现在做2114的产品开发.
出现以下问题,特向您请教!
问题:我们开发的产品要采样,采用周期固定.
于是我们采用timer0进行时钟触发,利用触发中断程序每隔10毫秒采样一次并显示波形.
这都能很好的进行.
但是在中断程序里面对几个全局变量赋值,跳出中断后却不能使用该全局变量.
很是头疼!
请赐教!
!
14框架如下:uint8a;//全局变量void__irqfuntimer0(){.
.
.
a=0;//在中断函数里面对全局变量赋值.
.
.
}voidfun1(){uint8i;i=0;.
.
.
.
.
.
.
i=a;//出错位置,在调试过程中运行到当前位置,鼠标移动到变量a上//显示数值是0,但是不能传给i,i的值不会随该命令改变.
.
.
.
.
.
.
}因此,我在中断函数中采集到的数据放到全局数组中.
采集完成关中断后在用户模式下的程序中来处理该数组,但是该数组中的数据也不能使用!
全局数组变量占1000个字节,IRQ堆栈长度是256.
A:全局变量用volatile声明.
第57问:Q:在AXD里打开DebugerInternals,在VariableName里为什么没有PINSEL2,ADDR,ADCR等寄存器要在哪里设置A:有些片内外设寄存器是不能读出,《ARM微控制器基础与实战》上的P33页有说明及处理方法(在Memory窗口写入相应寄存器地址).
第58问:Q:请问不连easyArm板可不可以直接软件调试程序我是指如果想直接调软件部分,能不能在ads或axd里直接调试A:这和板子没关系啊,你直接选ARMulate不就行了,注意把等待PLL配置完那条语句屏蔽就可以啦!
第59问:Q:AXD里面出现"RDIWarning00159:Couldnotopenspecifieddeviceport"谁能告诉我这个是问题啊我一直搞不懂啊,全部是按照《ARM微控制器基础与实战》第4章上配的图做的啊,但是就是不能仿真啊.
A:请先按照光盘的easyarm_drive\readme.
txt安装驱动程序.
15第60问:Q:1.
在《ARM微控制器基础与实战》的2.
6.
3节有说到"浮点数寄存器(F0-F7.
.
.
)",2104是否具有这些寄存器2.
如果EasyArm不支持浮点运算,而我的程序需要用到浮点运算,请问可以实现吗A:1.
没有.
2.
用C就可以用浮点运算.
第61问:Q:EASYARM2104的例子程序怎么都是调用C写的程序,汇编那个怎么没用的啊A:按如下步骤进行处理:1.
在项目管理窗口中删除原来的所有文件;2.
在项目管理窗口中增加汇编文件*.
S;3.
编译链接,调试.
第62问:Q:请问版主:在AXD调试软件中,我单步运行到一定时候,我想让自己编的软件从复位处重新运行,在AXD软件中,EXECUTE栏目中有单步,连续,运行到光标处等功能,但无复位功能,如果要实现此功能,如何操作A:我也没有发现,目前只能用重新装载的操作实现.
第63问:Q:在AXD调试中,通过从jtag接口,连接上lpc2106,出现如下信息:TKSimulatorforADS,V1.
2,2003/08SoftwareSuppliedby:ZLGMCUARM7TDMI-S,LittleEndian在从file|loadimgage.
.
.
文件,出现两种情况:1.
正常,完全能调试;2.
出现问题,如下:RDIWarning00254:UnimplementedRDImessage请问,这是错在哪里如何解决谢谢!
A:可能是电源或其他接插件接触不良引起.
第64问:Q:请教几个问题:1.
移植中底层接口里的__swi关键字在SDT中能用吗2.
为什么在勘误文档中时钟节拍服务子程序里去掉了开中断及关中断的宏3.
时钟节拍中断的优先级应该设为最高吗16A:1.
不知,请自己看一看软件自带文档.
2.
因为中断服务程序中肯定是关中断的.
3.
不必.
第65问:Q:arm汇编中的中括号是什么意思比如下面的例子中括号是什么作用呀[PLLONSTARTldrr0,=PLLCONldrr1,=((0xe8启动AXD.
现象:数码管能显示不断变化的数字0--F,但是AXD的连接失败,提示"DBEWarning00041:.
.
.
.
".
重复试了几遍,现象相同.
请教原因以及对策.
A:刚才把我机器的Win2K系统的用户属性从"PowerUser"修改为"Administrator"就没问题了.
可能是ADS/AXD安装的时候用了Administrator权限,在"PowerUser"下工作有问题吧.
如果哪位老兄有类似问题,不妨试一下这个方法.
第67问:Q:在Init.
s中有这样一段:ResetBLInitStack;初始化堆栈BLTargetResetInit;目标板基本初始化B__main;跳转到c语言入口谁知道__main()函数的具体内容假如我不需要调用库函数的话,是否可以改为BmainA:看调试是汇编代码里有__main(),组成成分与一些链接选项有关.
可以.
但是全局变量初始化不了.
17第68问:Q:我在C中嵌入这样一条语句__asm{MRSR4,CPSR;STMFDSP!
,{R4};ORRR4,R4,0x80;MSRCPSR_cxsf,R4}会出新报错"illegalwritetosp"版主和各位大侠有什么办法解决阿A:嵌入汇编不能使用SP.
第69问:Q:请问ADS如下的编译错误是什么意思L6221E:ExecutionregionER_ROoverlayswithExecutionregionER_ZIA:程序段内存分配可能有问题,RO(只读),ZI(0初始化)第70问:Q:在axd中有没有运行程序的时间计算器keil中就有那样的东西.
A:有的,不过不是时间而是执行周期,可以换算成时间.
在debuggerinternals中,具体可以参考帮助文档.
第71问:Q:我最初的init.
s中没有加入heap的分配和__user_initial_stackheap函数,结果程序跳到SWI中死循环.
我把他们加入后就好了.
或者不加入他们,把B__main改为Bmain也可以.
请问何解另外,就算目标板会陷入死循环,但是用软件仿真却可以正常运行.
何解A:堆的位置没有分配到有效的RAM中.
第72问:Q:在ARM汇编语言中,对立即数的有要求,我记得原来没有这样一说了.
现在反而糊涂了,用立即数时候,很小心很忌讳,不回象51下随心所欲的使用了,有对立即数熟悉的朋友站出来给大家释疑.
A:如使用"非法数据可以使用lrd送到寄存器"的方法.
首先在存储器中定义一个常量,再ldr进去,编译器是这样弄的.
可以看下面语句反汇编的区别;intz=0x101;intz=0Xff;18第73问:Q:请教各位:我在AXD中单步运行一段程序后,想回到程序的开始重新运行,除了重新加载,还有其他方法或按键A:你的程序有多大程序在Flash运行点击ReloadCurrentImage也不需要1秒吧~或在代码窗口SetPC=0第74问:Q:在《ARM微控制器基础与实战》程序清单6.
22的376页的OSIntCtxSW_1中:LDRR4,[R6]ADDSP,R4,#68LDRLR,[SP,#-8]MSRCPSR_c,#(NoInt|SVC32Mode)MOVSP,R4LDMFDSP!
,{R4,R5}LDRR3,=OsEnterSumSTRR4,[R3]MSRSPSR_cxsf,R5LDMFDSP!
,{R0-R12,LR,PC}^请问高手:LDMFDSP!
,{R0-R12,LR,PC}^是不是恢复新任务工作寄存器和工作模式,LR寄存器一并得到恢复,那么ADD指令后面的LDRLR,[SP,#-8]指令是不是可以去掉A:两者恢复的是两个不同处理器模式的LR.
第75问:Q:既然option页中的ImageentryPoint填入的是调试入口地址,那么在实际的程序运行当中它是不会覆盖代码中的ENTRY入口声明的,对吗仅仅是为了调试的方便.
A:ImageentryPoint优先.
其实代码中的ENTRY是为了确保代码不被优化掉.
第76问:Q:我想使用标准C语言的库函数,比如memset在string.
h中有定义,可是我直接包含#include,但是编译没错误,运行确有错误,应当怎么设置A:请使用最新的工程模板第77问:Q:软件中断是不是必须由SWI指令触发A:可以直接用你定义成软中断的函数名啊.
比如:19__SWI(0x12)voidmyswi(void);//声明函数__asm//调用方式1{swi0x12}myswi();//调用方式2第78问:Q:《ARM微控制器基础与实战》程序清单6.
9的程序是在哪里被调用的_user_initial_stackheapLDRr0,=bottom_of_heapMOVpc,lrA:__main.
千万别删哟,否则出大事的.
第79问:Q:"LDRR0,=PINSEL0"中"="是什么意思这语句是取地址还是取地址中的内容呢A:这是LDR伪指令,可用来加载32位立即数或地址,LDRR0,=PINSEL0是将PINSEL0的地址加载到R0中.
第80问:Q:我不明白"SWI0"和"SWI0X123456"这两条指令中的0和0X123456中有何用.
有没有应用SWI的具体例子让我看看A:那是特定的中断入口地址,见ADS_DeveloperGuide_D.
pdf下的swi.
第81问:Q:SWI的功能表吗A:SWI的功能表由swi异常服务程序决定.
很多时候由编程者自己决定.
第82问:Q:请问:我在实验您的原代码进行ucos移植时用的是例1,但是在按照图7.
17设置处理器的仿真器模式时enablecommschannelview和semihostin项为不可激活状态.
为什么,能否给一点提示A:在一些仿真器上使能了它们会影响swi异常处理程序.
第83问:Q:请问"UnimplementedRDImessage"这个出错提示是什么意思啊20还有,有的时候当我用axdload一个.
axf文件时,常常loading的没完没了,这是怎么回事啊A:UnimplementedRDImessage:为命令操作失败,需要重新连接.
下载不结束为出现不正常现象,请重新连接并下载.
如果每次都出现该现象请联系我们的技术支持.
第84问:Q:各位高手好,我是ARM初学者我在程序调试中"LDRPC,[PC,R2]"命令执行后PC为什么=0x0000000c,在这条命令执行前PC+R2地址上的值是0x0000000c吗A:要使用软件仿真.
0x0000000C是预取中止了.
Q:请问:ARM7在初始化CPU堆栈时,寄存器CPSR和CPSR_c有什么关系CPSR_c是在那里定义的A:这是MSR指令的语法,"_"后部分指定CPSR的域,请参考《ARM微控制器基础与实战》上关于这条指令的说明.
第85问:Q:软中断SWI作底层接口的问题.
以下函数为啥要通过软中断调用,可以直接调用吗OS_TASK_SW(),_OSStartHighTdy(),OS_ENTER_CRITICAL),OS_EXIT_CRITICAL(),A:在用户模式或Thumb状态不能直接调用.
第86问:Q:ARM的一条指令是32bit长,但有时一个立即数也是32bit,这是如何解释的A:指令中使用的立即数需要时8位数移位获得,并非所有数都可以.
第87问:Q:请教:全局变量的值在复位(不断电)后会不会自动清零(用光盘自带的启动代码)A:在C语言中一般会会初始化0或用户指定的值,但这不是硬件自动的.
第88问:Q:thesettingfilesfor*.
mcpislocked!
是什么问题A:文件属性只读.
第89问:21Q:请问,关于printf()在ads中怎么用不了谢谢!
A:请用我们我们网站上下载2104的工程模板,它解决了这个问题.
即使这样,也不能真正使用prinf.
您还需要自己编写一些底层函数才能使用,详细参考ads自带的ADS_CompilerGuide_D.
pdf.
第90问:Q:swi的功能号是如何来的它和LR寄存器的值是何关系如《ARM微控制器基础与实战》程序清单6.
13LDREQR0,[LR,#-4];BICEQR0,R0,0xff000000A:LDREQR0,[LR,#-4];用来读SWI的代码BICEQR0,R0,0xff000000;是ARM方式进入,取低24bit第91问:Q:请问在TargetInit()中函数开始会执行srand((INT32U)TargetInit),它是做什么用的A:ex1用它来产生随机数种子的.
Q:请问:我建立的工程中,所有源文件与2104附带的光盘例子源文件相同,编译链接也一切正常,可就是不能到板子上跑!
提示错误是:向量中断有错误,无法自由运行!
!
这是怎么回事相同的源文件,加在你的工程里,正常;加到我的工程中就出错!
我创建的是ARM可执行映象.
A:vector.
s你自己的吗如果是要计算向量去的累加和了.
第92问:Q:请问:vectors.
s中"DCD0xb9205f80"的0xb9205f80在实际运用中需要改动吗A:不需要更改,除非改动了向量表中的指令代码.
第93问:Q:请问,为什么queue数据队列,《ARM微控制器基础与实战》上给画成了环形A:因为头跟尾的指针指向一个地址,队列逻辑上是环状的.
第94问:Q:有没有人成功的把一个数据定义到程序空间里各种方法我都试了,是不是有什么编译开关A:使用const修饰,定义变量时带初始化值,要定义为全局的变量.
第95问:Q:ads里没有CODE关键词,怎样使定义的字符串数组不占用RAM空间22A:constunsignedcharstring[]第96问:Q:在例程中TIME_test中的TIMEOUT当写入时提示:Warnning!
interruptvectorsdataisnotcorrect!
Programyoudownloadedcannotrunfreely!
我不知怎样改设置,哪位提醒一下A:中断向量表的校验和不为0,用AXD看0地址的数据(32位方式),自己加一下.
注意把高于32位的部分去掉.
第97问:Q:请教各位:我做TIMEOUT实验(2104板),Make通过,Debug时出现了如下错误提示:Warnning!
interruptvectorsdataisnotcorrect!
Programyoudownloadedcannotrunfreely!
设置Link:ARMLinkr0base:0x00000000rwbase:0x40003000imageentrypoint:0x00000000其它的没变!
!
而我使用ISP完全可以下载而且可以运行!
这可以说是设置问题,但是我实在找不到!
怎么办A:请看一看配套《ARM微控制器基础与实战》附录1,ISP软件可能对它进行了处理,而JTAG没有特殊处理第98问:Q:*(volatileunsignedint*)是什么意思例如*(volatileunsignedint*)addr具体是什么意思A:分开来看,(volatileunsignedint*)就是定义一个可变的无符号整形指针,前面的那个*就是取起内容.
第99问:Q:如何理解#defineVICIRQStatus(*((volatileunsignedlong*)0xFFFFF000))A:宏定义,参考C语言的书籍.
(volatileunsignedlong*)0xFFFFF000将0xFFFFF000强行转换为指针,然后*(指针)即可对此地址进行访问.
第100问:Q:在异常处理向量表的设置中,为什么不直接将异常向量的入口地址写入PC中呢,为什么非要用什么DCD这些伪指令,到底有什么用啊A:为了保证任何时候其累加和为零,不然改一次程序就要计算一次.
23第101问:Q:单步调试i2cINT.
C在ISendStr中启动总线后,程序怎么又跑到vectors.
o中,进行初始化了呢A:由于VIC的限制,程序不能在0x18停下来,否则执行非向量中断.
如果没有设置,则非向量中断为0,将从0地址执行.
建议:有中断时不要单步执行程序,可以手动暂时关中断或设置断点代替单步.

(编者注:下载最新的驱动可以解决这个问题)第102问:Q:请教:如何修改ADS的启动代码,从__main到main,按道理应该有一个文件,修改这个小文件,就可以修改启动代码.
A:__main是ADS运行库,最好不要修改,要是不使用库就不要用main()函数,起个别的名字.
直接跳转过去就行了.
详见:《ARM体系结构与编程》P328.
第103问:Q:我在JTAG仿真时出现的对话框,提示:Warnning!
interruptvectorsdataisnotcorrect!
Programyoudownloadedcannotrunfreely!
A:参见《ARM微控制器基础与实战》附录一第一个问题的第二部分,选择源代码的启动代码文件夹下的vectors.
s,并参照《ARM微控制器基础与实战》图7.
11设置.
第104问:Q:初始化代码中分配堆栈的问题MSRCPSR_c,#0xd3;进入特定的处理器模式LDRSP,StackSvc;给当前处理器模式的堆栈指针赋值,这只是一个值而已,;他在接下去的DCD语句赋值SvcStackSpaceSPACESVC_STACK_LEGTH*4这个语句开辟一个SVC_STACK_LEGTH*4大小的内存,SvcStackSpace是这块内存的标号,我想应该就是内存的首地址,这样应该好理解了.
StackSvcDCDSvcStackSpace+(SVC_STACK_LEGTH-1)*4这个语句就是把这个首地址加上堆栈大小值.
A:计算出堆栈指针来,我想这个堆栈是向下生长的,所以SP赋值的是堆栈地址最高的那个.
第105问:Q:请问启动代码中这句是什么意思24__user_initial_stackheapLDRr0,=bottom_of_heapMOVpc,lr;/*分配堆空间*/AREAMyheap,DATA,NOINIT,ALIGN=2bottom_of_heapSPACE256;库函数的堆空间我的问题是:1.
这个函数在哪里被调用2.
赋值给r0以后就完事了r0起什么作用A:堆和栈的分配函数,由ADS提供的初始化代码调用,具体参考配套《ARM微控制器基础与实战》的相关部分.
第106问:Q:2104的启动代码是否适用2124呢网站上下载的那个easyarm2104工程模版里面写着armexecutableimagforlpc21**,是否说也适用2124呢如果不行,哪些地方需要修改希望能够指点一下!
A:您可以下载2100的工程模板.
第107问:Q:我在用ARM的IAP功能,要把已经烧到flash中的数据写到RAM中,我是这么写的:uint32*q,data;q=0x00006000;data=*q;这是要读的flash的起始地址,但是第二句编译出错,我想应该是C编译器不许给指针直接赋值,我用汇编解决了这个简单的问题,但是怎么用C来解决呢A:q=(uint32*)0x00006000;第108问:Q:问一个有关汇编的基础问题.
例程:ANDSR1,R1,#0x0400BEQWAITOK请问ANDS是如何影响标志位的,而BEQ判断的是那两个操作数相等时执行A:R1&0x0400=>R1,若结果为0(即R1为0),则标志位Z=1.
当Z=1时,BEQWAITOK有效执行.
第109问:Q:请教:在ADS中怎么给某个变量确定固定物理地址就是类似KEIL中的XDATAxxx_AT_0x4456的功能.
A:使用分散加载机制,mem_c.
scf等就是例子.
25第110问:Q:哪里有介绍ARM的C语言编程的A:其实大多数嵌入式系统的C语言都差不多,可找一本写嵌入式C语言的书即可.
第111问:Q:请问在系统复位后首先执行的是否为BootBlock的中断向量然后由bootblock里面的程序决定是执行用户程序还是ISP程序.
那么这时启动的bootblock里的中断向量表和用户程序里的中断向量表是如何在flash里安排的在《ARM微控制器基础与实战》上看到的是复位后boot扇区的最低64字节出现在0x00000000区域,那用户的中断向量表应该在哪个区域产品中一般为0x00000000,在开发板中重启后实际为bootblock的中断向量地址,对吗A:看一看3.
3.
6节.
产品中一般为物理0地址处.
第112问:Q:《ARM微控制器基础与实战》上有一段程序:uint32i;i=VICIRQStatus;i=IOSET;请问:为何先要读取VICIRQStatus的值,才能读IOSET的值A:读出VICIRQStatus只是为了方便观察当前VICIRQStatus的值,没其它用途.
第113问:Q:请问处理器在什么情况下处于用户模式多谢!
A:需要你去设置CPSR寄存器.
用户程序前台程序一般在用户模式/系统模式下运行.
第114问:Q:在EINT1_LED.
S中的倒数第二行有一个单独的B指令,它是什么含义多谢!
A:是"B.
",跳转到当前地址,即死循环,与以下代码等效:HALTBHALT第115问:Q:模板里到底有些什么A:起动代码,相关编译链接设置.
起动代码是用来初始化系统的程序,如Startup.
s,target.
c,stack.
s等等.
26第116问:Q:今天试用了工程模板.
使用了ARMExecutableImageforlpc21xx建了个项目,看了下启动文件与原来的不同了,用了个《ARM微控制器基础与实战》上的例程来作试验,用的是time0定时中断来亮灯的程序,用的例程的TargetInit()和intmain(void);修改了用户堆栈和bottom_of_heap的长度,程序能运行,但不能产生中断,time0和VIC初始化的是正确的,是什么原因用工程模板建立的项目文件夹的src中多了几个文件,其中的mem_a.
scf,mem_b.
scf,mem_c.
scf,怎样才能导入到项目中来谢谢!
A:原来startup.
s默认是关了中断的!
第117问:Q:在easyarm2104的配套光盘中的IAP例子中,定义了一个函数指针void(*IAP_Entry)(uint32param_tab[],uint32result_tab[]);我看不懂,这个函数和普通的函数定义方法不一样,尤其是(*IAP_Entry),大家教教我.

A:这是一个指向函数的指针!
!
第118问:Q:变量定义中volatile是什么意思请大侠告诉我一下《ARM微控制器基础与实战》上c语言定义变量时出现了volatile,不知道是做什么用的.
C语言里好像没有这个语法阿!
A:告诉编译器不要优化掉,volatile是易变的意思.
第119问:Q:请问ARM中的一个编译方面碰到的问题.
在ARM地汇编语言中,有条件编译伪指令IF.
.
ELSE.
.
.
ENDIF;而在C语言中,有相应的条件编译伪指令#IF.
.
.
#ELSE.
.
.
#ENDIF,在较大的程序设计中,往往需要对整个程序进行条件编译.
我要问的问题是:我在CONFIG.
H中设置一个编译开关,对所有的C文件进行条件编译是有效的,因为每个C文件中都有一个语句:#include"config.
h",我如何将该编译开关的信息传递给汇编语言文件,如VECYORS.
SA:好像没有直接的方法,可以编写一个CONFIG.
INC来管理汇编程序的配置.
27第3章操作系统第120问:Q:在SWI_Exception的0x40中的_OSFunctionAddr[regs[0]]中的Regs[0]指的是堆栈中的R0还是其它A:是堆栈中的R0.
第121问:Q:《ARM微控制器基础与实战》中在ucos移植中说C语言无法保证堆栈的结构,请问这是什么含义A:就是不能保证有哪些寄存器入栈及寄存器入栈的顺序.
第122问:Q:请问斑竹OSNeedToSwapContext在哪个文件里声明的,我找不到A:这是要删除的,我的OS_CPU_C.
C中函数OSIntCtxSw:/**函数:OSIntCtxSw.
*描述:中断级任务切换,此处并不真正进行任务切换,具体切换在IRQ服务程序中.
*/voidOSIntCtxSw(void){}第123问:Q:我的情况如下:我自己制作了一个硬件模块,用的是lpc2214,现在需要将ucos-ii移植到上面去.
我用板子做ZLG公司提供的实验,是可以做的,如led灯等,按道理说串口等硬件应该没有问题,然后我就做公司提供的那三个移植实例:ex2_arm.
编译等是通过的,生成了hex文件,下载到flash中,运行easyarm,但是没有任何显示,不知道是什么问题,应该是硬件上呢,还是其他的A:这主要是RAM的问题,请用我们的工程模板,并选择在FALSH中调试,如果编译通过,则一般行,否则请减少任务堆栈的大小.
第124问:Q:下载了工程模板以后,将工程模板目录下的文件都拷贝到了stationary目录下,然后建立了一个ARMExecutableImageforUCOSII(forlpc21xx)的工程,在PROJECT目录下的文件结构如下:28test.
cinlcudes.
hsrc->config.
h,heap.
s,includes.
h,irq.
s,lpc2294.
h,lpc2106.
h,mem_a.
scf,os_cfg.
s,stack.
s,startup.
starget.
c,target.
h,ucos_ii.
c,ucos_ii.
h,arm->os_cpu.
h,os_cup_a.
s,os_cup_c.
cuCOS->ucos源文件arm_pc->pc.
h,pc.
c编译可以通过,但是MAKE时提示:ERROR:ExecutionregionIRAMoverlapswithExecutionregionSTACKS.
如果我表述得不是很清楚的话,那么可否告诉我工程模板到底怎么操作,怎样才能把例子在ARM2104上跑起来.
A:RAM占用太大,请在flash中调试,并减少任务堆栈的大小.
第125问:Q:我改了以下SCF文件,把堆栈的值设置大了一些,但是还是出现以前的老问题,那就是程序跑到TargetResetInit()函数处后就跳到取数据终止的异常中断去了.
A:不能把堆栈设置到内部RAM之外.
第126问:Q:新旧任务级的切换是不是必须在管理模式下切换切换后新任务的运行是不是必须在管理模式下A:在配套《ARM微控制器基础与实战》里的任务切换是通过SWI实现的.
SWI会使CPU进入管理模式.
同时CPU自动将任务的CPSR保存到管理模式的SPSR中.
SWI程序还保存了一些寄存器到管理模式的堆栈中.
然后任务切换程序会在管理模式和系统模式间来回切换,目的是把保存在管理模式堆栈的寄存器内容拷贝到任务的堆栈中(注意:任务是运行在用户模式或系统模式的,这两个模式使用同一个SP,这时的系统模式的SP指向的就是任务的堆栈),也会将管理模式的SPSR拷贝到任务堆栈(注意管理模式的SPSR就是在执行SWI时CPU自动保存的任务运行时的CPSR,它记录了任务运行的CPU模式和其他的运行状态信息).
最后把任务模式SP保存到任务的任务控制块中(注意此时CPU已经是运行在系统模式下的了).
以上大致就是uC/OS-II中所说的保存任务运行环境的工作.
任务的恢复运行就比较好理解了.
接着前面的说,CPU还在系统模式下.
程序从任务控制块中得到任务的堆栈指针.
(OSIntCtxSw_1的第一句)将这个指针的值加上一定的偏移量保存到SP中.
为什么要加上一定的偏移量呢因为这时任务的堆栈中除了保存任务运行时的数据外还保存了任务的上下文,即任务切换时保存的CPU寄存器等内容.
而我们恢复任务等一下是在管理模式下进行的,用的是管理模式的堆栈指针.
等恢复任务后CPU就开始执行任务29代码了.
我们已经没有机会再修改系统模式下的SP值了.
所以在这个时候就应该对SP进行调整.
调整的大小就应该是所保存的上下文占用的大小.
从堆栈中恢复LR的值.
同样的道理,管理模式和系统模式使用不同的LR,在切换到管理模式之前,必须先在系统模式下恢复任务运行时的LR.
(OSIntCtxSw_1的第三句)接下来就切换到管理模式了.
(OSIntCtxSw_1的第四句)使管理模式SP指向任务堆栈(第五句)注意这是没调整过的任务SP,也就是保存了上下文环境的SP.
接下来的事情就真的很简单了.
从堆栈中恢复出保存的东西.
先是OSEnterSum,然后是任务的CPSR(注意任务的CPSR就是进入SWI时由CPU自动保存到管理模式的SPSR中的,所以此时也是恢复到管理模式的SPSR中)最后一句就是典型的中断返回语句了.
恢复寄存器,恢复PC,加了一个^号意味着同时将SPSR拷贝到CPSR中.
现在是回答你的问题的时候了.
切换前任务是运行在什么环境下的(包括CPU模式,所有的寄存器),任务切换后任务就是运行在什么环境下的.
对任务来说,什么也没改变.
只有PC值指向了下一条指令,哈哈.
第127问:Q:请教:在rtos51解释的概念里的"信号量"比较难懂,"消息队列"可以理解为任务之间互相传递的参数,但"信号量"怎样理解呢具体一点,谢谢!
A:信号量是60年代中期Edgserdijkstra发明的,它实际上是一种程序间的约定机制,这种约定决定那个程序(任务)可以执行.
在多任务内核中普遍使用信号量用于:1.
控制共享资源的使用权(满足互斥条件);2.
标志某事件的发生;3.
使两个任务的行为同步.
信号量像是通行证,且通行证的数目是有限的.
任务要运行下去,要先拿到通行证.
如果信号量已被别的任务占用,该任务只得被挂起,直到信号量被当前使用者释放掉.

信号量的值可以是0到255或0到65535,或0到4294967295,取决于信号量规约机制使用的是8位,16位还是32位.
到底是几位,实际上是取决于用的那种内核.
根据信号量的值,内核跟踪那些等待信号量的任务.
一般地说,对信号量只能实施三种操作:初始化,也可称作建立;等信号也可称作挂起;给信号或发信号.
信号量初始化时要给信号量赋初值,等待信号量的任务表应清为空.

想要得到信号量的任务执行等待操作.
如果该信号量有效(即信号量值大于0),则信号量值减1,任务得以继续运行.
如果信号量的值为0,等待信号量的任务就被列入等待信号量任务表.
多数内核允许用户定义等待超时,如果等待时间超过了某一设定值时,该信号量还是无效,则等待信号量的任务进入就绪态准备运行,并返回出错代码(指出发生了等待超时错误).
任务以发信号操作释放信号量.
如果没有任务在等待信号量,信号量的值仅仅是简单地加1.
如果有任务在等待该信号量,那么就会有一个任务进入就绪态,信号量的值也就不加1.
于是通行证给了等待信号量的诸任务中的一个任务.
至于给了那个任务,要看内核是如何调度的.
收到信号量的任务可能是以下两者之一:1.
等待信号量任务中优先级最高的任务;2.
最早开始等待信号量的那个任务,即按先进先出的原则(FIFO).
30有的内核有选择项,允许用户在信号量初始化时选定上述两种方法中的一种.
但SmallRTOS51只支持优先级法.
如果进入就绪态的任务比当前运行的任务优先级高(假设,是当前任务释放的信号量激活了比自己优先级高的任务).
则内核做任务切换(假设,使用的是占先式内核),高优先级的任务开始运行.
当前任务被挂起.
直到又变成就绪态中优先级最高任务.
第128问:Q:我用了两个串口,但当我把程序做大的时候,发现在这个任务里所建立的邮箱失败,我只用一个串口时是没有这种事情的.
Uart0ReviceMbox=OSMboxCreate((void*)0);/*建立邮箱*/if(Uart0ReviceMbox==NULL){while(1);}我想问一下有几种可能会造成这种分配失败我的程序存储器用量如下:TotalR0size22168TotalRWsize7956TotalROMsize22168A:在OS_CFG.
H中定义最大事件数,太小的话,分配会失败的.
第129问:Q:在周立功的原例子中,系统代码事先烧到ROM中,应用代码在RAM中运行.
我想知道,(RAM)应用代码调用系统函数,那么2104是如何把ROM中的系统函数的地址传递给RAM,也就是应用代码和系统代码是如何关联在一起的我猜是通过swi(软中断),应用代码通过swi调用系统代码,但是swi中断程序中,是如何获得烧到RAM中的系统函数的地址哪百思不得其解.
A:您看一看romcode工程中swi的0x40和0x41功能,及Os_call.
c,Os_call_arm.
s,Usr_call_arm.
s.
第130问:Q:16k的RAM,128的FLASHROM跑uc/os-II够吗再跑点应用程序够吗A:取决于您的应用程序对RAM的需求,及代码量.
一般程序可以.
第131问:Q:利用lpc2104开发应用程序时,在Os_call_arm.
s,Os_call.
c两个文件中,那几个函数需要在汇编中实现,哪几个需要在.
c文件中实现,为什么谢谢各位大虾!
A:4个以上参数用c实现.
因为通过寄存器只能传递4个参数.
31第132问:Q:如果禁止SmallRTOS51进行中断嵌套管理(#defineEN_OS_INT_ENTER0),是否还需要设置中断优先级寄存器IP,使得所有中断的优先级都相同(全高或全低)A:受SmallRTOS51管理的设置为最低优先级,不受SmallRTOS51管理的设置其它优先级较好.
第133问:Q:在OS_CPU_S.
s文件中有如下一段代码,其中有两句代码的作用不是很明白,请解说一下.

OSIntCtxSw_1LDRR4,[R6];获取新任务堆栈指针;这两行代码有何作用呢ADDSP,R4,#68;17寄存器CPSR,OsEnterSum,R0-R12,LR,SPLDRLR,[SP,#-8]MSRCPSR_c,#(NoInt|SVC32Mode);进入管理模式MOVSP,R4;设置堆栈指针LDMFDSP!
,{R4,R5};CPSR,OsEnterSum;恢复新任务的OsEnterSumLDRR3,=OsEnterSumSTRR4,[R3]MSRSPSR_cxsf,R5;恢复CPSRLDMFDSP!
,{R0-R12,LR,PC}^;运行新任务A:这两条指令是在系统模式下恢复用户模式下的LR;可以参考配套《ARM微控制器基础与实战》6.
4.
9节.
第134问:Q:我将《ARM微控制器基础与实战》上uC/OS-II的第一章例2移植例在ARM2104开发版上实现例2中的TEST.
C中的"#defineTASK_STK_SIZE512"改为".
.
.
256",程序编译后,数据量低于16K,能正常运行,但运行时"TotalStack"不是256全是1024.
另UC/OS-II书上,第一章例2每一个任务的堆栈都是512,为什么书上11页"TotalStack"是"624,1024,1024,1024,1024,1024,1024",请老师指点,万分感谢!
A:显示的是字节而定义的是字.
第135问:Q:可不可以把所有的任务和相关信号量(二值)在一个任务里面一起创建呢我现在是这样做的,不知是不是这方面的原因而且全部信号量是这样创建的:XX1=OSSemCreate(0);32XX2=OSSemCreate(0);XX3=OSSemCreate(0);一共创建了十个信号量,以前程序代码版本是分开写的执行起来没有问题,不知现在为什么这样写就会出现小问题呢这样的问题和我的任务和信号里书写位置有关系吗A:必须在使用信号量前创建信号量.
第136问:Q:UCOS在中断处理完后调用OSIntExit(),该函数将判断是不是要进行任务切换,如果是则调用OSIntCtxSw()切换任务,然后才恢复寄存器,中断返回.
这样说来,在中断返回前,已经切换到别的任务去了,在再次回到被中断的任务前,是不是一直没有中断返回A:如果进行任务调度,则不会执行OSIntCtxSw()后的语句,相当于中断已退出.
第137问:Q:最近我在学习使用SMALLRTOS时发现一个BUG.
任务在调用系统等待函数OSWait(K_TMO|K_SIG,x)后,不能在延时x个ticks后被唤醒.
我分析了一下原因如下:在OS_CORE.
Cuint8OSWait(uint8typ,uint8ticks)small中,case(K_TMO|K_SIG):中执行了函数OSTaskSuspend(OSTaskID);(OS_CORE.
C第549行)而此函数将延时值改为了0!
解决办法:将此函数改用另一个函数OS_TaskSuspend(TaskID);并在其后加入任务切换函数OSSched();便能工作正常.
A:对,这是疏忽,谢谢.
您的更改是对的.
第138问:Q:在文件Os_cpu_a.
s中的函数OSIntCtxSw中有如下语句:……(1)LDRR4,[R6](2)ADDSP,R4,#68;17寄存器CPSR,OsEnterSum,R0-R12,LR,SP(3)LDRLR,[SP,#--8](4)MSRCPSR_c,#(NoInt|SVC32Mode);进入管理模式(5)MOVSP,R4……(6)LDMFDSP!
,{R0-R12,LR,PC}^;运行新任务《ARM微控制器基础与实战》404页中解释:只所以要(1)(2)是因为"OSTCBHighRdy—>OSTCBStkPtr保存的是任务栈位置,而寄存器恢复后堆栈指针并不指向这,所以要调33整新任务堆栈指针.
"可是将堆栈指针调整到"新任务入栈的其它数据(见《ARM微控制器基础与实战》图6.
3)"处后,除了取出了LR以外并没有做什么,而当执行了(4)后又重新将堆栈指针指向了栈顶(即第(5)句).
我认为可以将(2)省去,直接将(3)改为"LDRLR,[SP,#60]",而当执行完(6)后,堆栈指针就自动指向了"新任务入栈的其它数据"处.
这样修改后我运行了EX1_arm例子,正常.
请问这利用(3)进行堆栈指针调整的原因是什么不调整可以吗谢谢.
A:注意不同模式有不同的SP指针.
您这样做会造成内存泄漏,长时间运行会耗尽堆栈而使程序崩溃.
第139问:Q:不明白在光盘上ROMCODE/SRC/下的os_call.
c做什么用.
A:是应用程序与事先固化到flash中的ucosii接口的一些代码.
在本例中为应用程序如何调用事先固化到flash中的ucosii的OSFlagPend等函数的接口代码.
请看配套《ARM微控制器基础与实战》的7.
4.
3节的第10点.
第140问:Q:请问在OS_CORE.
C中的常数数组OSUnMapTbl[]是做什么用的A:用来计算优先级的,查表计算比较快.
第141问:Q:ucos的中断嵌套层数是否受到初始化时分配的IRQ堆栈大小的限制我的理解是每一次中断需入栈的寄存器有R0-R3,R12,LR,SPSR,共7个,如果想达到8层嵌套的话,堆栈长度IRQ_STACK_LEGTH应设为56,不知这样理解对不对.
A:是,但中断至少占用8个字,因为c语言的中断处理函数会将一些数据压入堆栈.
要达到8级嵌套需要的堆栈长度与具体的代码有关.
(编者注:新移植代码已有改变)第142问:Q:请问:核心定时器中断不进入可能因为……我的程序在运行一段时间以后,核心定时器中断即操作系统用的Timer0不能进入,查发现CPSR的I位为1,请教这可能是哪个原因A:估计为开关中断次数不匹配造成.
第143问:Q:请问:GetOSPprioCur()函数应怎样调用它是一个内核函数吗为什么我在内核和任务分别编译时正常,而合到一起编译时它告警为未定义呢同时我已给您发了一个邮件,请教如何将分别编译的程序合在一起编译的方法,请指教!

A:这是我自己编写的函数,其实就是返回OSPrioCur的值,请参考MyFunction.
c.
34第144问:Q:关于不受uc/os控制的中断:在ARM板中,非屏蔽中断可以挂起正在执行的uc/os任务,除了不能使用uc/os中的函数外,它的执行工序是不是和受管理的中断一样,先挂起当前任务,再保存CPU寄存,然后再执行中断ISR,完成后,内核脱离,寄存器恢复,最后任务调度.
另外,《ARM微控制器基础与实战》中提到不受管理的中断,它的工作是否和非屏蔽中断一样,也可以在uc/os正执行时发生中断.
如果不同,它们是怎样工作最好是象受管理中断一样说明一下它的工作时序!
A:必须比受管理的中断的优先级高,编写方法与没有OS时中断的编写方法一样.
第145问:Q:不受uc/os-ii管理的中断和受管理的中断是否具有相同的响应方式,即不受管理的中断在中断uc/os正执行的任务后,是不是也是先挂起当前的任务,保存CPU寄存器,再执行中断子程序,恢复CPU寄存器,进行最优先级任务的调度.
A:不受uc/os-ii管理,uc/os-ii都不知道,还有什么任务调度Q:我知道不受管理的中断不能调用uc/os的函数,但《ARM微控制器基础与实战》上说:FIQ不受uc/os管理,但可以用来执行紧急任务,就是说在uc/os运行时,不受uc/os管理的中断还是可以发生的,它是把整个uc/os操作系统中止,还是只是中止uc/os正在执行的任务.
不受管理的中断完成后,接着执行什么A:可以发生,中断整个RTOS.
Q:我看了您在lpc210x上的移植代码,你在说明中说:"如果您想通过软件仿真,请将target.
c中的第51行屏蔽,这样就可以看到任务逐个切换,最后将进入空闲任务.
"我照这做了,但是在单步或者设断点执行时会产生异常,原因是未定义指令OS_ENTER_CRITICAL()引起的,经过编译的函数都会变成蓝色,但这个函数还是黑色,因为它实际上是一个软中断,请教您如何调试才能看到任务逐个切换谢谢!
A:1.
屏蔽的那一行是死等锁相环锁定,软件仿真时是没有锁相环的.
2.
黑色是正常的,因为没有定义成函数.
3.
因为你的AXD->OPTION->配置处理器中的VECTORCATCH中的S选中了,所以AXD将你的软件中断当成了异常给捕捉了,取消即可.
第146问:Q:请教ucos2的源代码中经常碰到:return((void*)0)是什么意思A:返回空指针.
第147问:Q:这是个什么错误,怎么改啊OsMemPut是个函数名称Error:L6200E:SymbolOSMemPutmultiplydefined(byuCOS_II.
oandOs_mem.
o).
A:这是重复定义错误.
请不要把uCOS_II.
C添加到你的工程中.
35第148问:Q:我想请教一下在配套光盘中有没有ucosII.
h文件,怎么我总是找不到的如没有能否提供下载地方谢谢!
A:北航出版的第2版就带有uC/OS2.
52源代码,还可以到其它网站上找找.
第149问:Q:我想问一下一个任务中的子函数的局部变量算不算进堆栈的容量.
我发现我在用邮箱传递一个较大的值时,是在一个任务的函数中声明了uint8byte[500],可在传递时值发送了变化,只好用的外部变量了,最后搞得邮箱只起了信号量的作用,所以我觉得局部变量虽然是从堆栈中取得数据,最后在任务切换时,把局部变量也保存到堆栈中,不知道我这种理解是否正确A:算.
局部变量在函数退出后(不管任务是否却换过)被释放.
第150问:Q:我用UCOS在EASYARM上的一个程序内编写了5个任务,前4个任务调试后工作正常,在编译第5个任务时,提示为:ExecutionregionER_ROoverlapswithExecutionregionER_ZI.
编译还提示:TOTALROMSIZE(CODE+RODATA+RWDATA)8624我曾经试图修改"#defineTASK_STK_SIZE64"也不管用,请问,如何解决A:问题已找到,代码超过16K.
上面的信息会在zi段或者rw段与ro段(代码段)发生重叠时发生.
第151问:Q:请教uc/os移植问题在2104上面能进行移植吗如果不行的话,需要买2106A:你要在os_cfg.
h中把不用的内部调用都裁减掉,就可以做一个很小的内核,就是不裁减你就是14k左右,写在FLASH里一样也能运行.
第152问:Q:请教信号量的概念问题.
我准备用信号量来编写一个ARM程序,但我没有完全理解信号量的概念.
例如:现在有4个任务:TASK1,TASK2,TASK3和TASK4,任务的要求是:TASK1和TASK2之间需有信号量传递信息;TASK3和TASK4之间需也有信号量传递信息.
假定TASK1和TASK2之中已建立了一个信号量为RandomSem=OSSemCreate(1);我要问的问题是:TASK3和TASK4之中的信号量是否需重新建立一个例如,加一条36RandomSem1=OSSemCreate(1);换一个问法:即若TASK1和TASK2之间需有信号量传递信息;TASK3和TASK4之间需也有信号量传递信息,我只需在运行这4个任务之前的初始化程序中有一条指令即可:RandomSem=OSSemCreate(1);A:用两个信号量,你第一个说法对了.
第153问:Q:各位:在UCOS多任务中有一个任务结构如下:voidTASK(*pdata){uint8i;任务循环前的一些指令集A;while(1){任务循环;}}我要问的是:与该任务有关的初始化,如串口初始化,是否不用放在整个程序的开始处,而作为指令集A的一部分,也可达到同样效果A:启动和初始化代码放在一个文件里主要是为了程序的模块化,不过代码少的话倒是可以放在一个函数里完成.
A:ucos的事件标志使用注意点:请在事件标志结构定义前加__packed,否则由于字节对齐的问题会产生没有反应的bug!
第154问:Q:移植中碰到的问题!
我把周工《ARM微控制器基础与实战》上的范例1移植到ARM上,但任务没有跑起来,请做过移植的朋友帮帮我吧!
我是把代码生成HEX文件全部下到FLASH中,不知道这样对不对啊软件需要怎么设置呢A:先检查ARMLinker的设置是否正确参照《ARM微控制器基础与实战》P42O设置release的参数.
A:感觉运行ex1还是比较容易的,毕竟斑竹都已经把代码写好调试好了,你可以不必完全把它拷贝下来,可以自己建一个project,然后一个个文件添加,这样比较容易弄懂哪些文件都是来干嘛的,哪些还需要自己改写.
推荐在建立project时可以把相应文件分组,我就是把uC/OS2.
52文件放在一个组下,需要自己改写的(如OS_CPU_A.
S)放在一个组内,启动代码放在一个组内,自己的代码(如main,自己的任务)放在一个组内,这样比较分明些,个人建议.
第155问:Q:看过操作系统固化之后,有点疑问:37把操作系统和用户代码分开真的能节约RAM空间吗只是在用户代码定义的起始地址在0x40000000的情况下(即调试时)才会节约吧一般情况下我觉得如果要真正使用的话都应该是把程序起始地址定义到00000000上的,这样的话才有,不然一掉电程序就没了.
这样理解对吗A:是的,参考合并在一起的例程http://www.
zlgmcu.
com/download/downs.
aspID=861.
第156问:Q:任务间的数据传输除邮箱等外是否可以建立一个全局变量在任务间传递数据!

A:可以,但要注意重入问题和代码优化问题,最好使用volatile修饰变量,如果不能一次读写完毕则需要加上开关中断的代码.
第157问:Q:请问:uc/os任务堆栈问题.
在ucos移植的程序EX1_arm中:#defineTASK_STK_SIZE128/*Sizeofeachtask'sstacks(#ofWORDs)*/#defineN_TASKS10/*Numberofidenticaltasks*/请问,任务堆栈设为什么设这么大A:可以变小,但要在复杂任务中应保证够用.
第158问:Q:在看uc/os-II的书时,关于ucos-II中任务切换的几种情况的问题.
1.
在一个时钟周期内,至少所有的任务都要运行一遍,对吗2.
任务切换发生的三种情况:a.
任务A主动放弃CPU的主动权,利用OSTimeDly()延时,进行任务切换;b.
中断时钟周期发生时,在任务就绪表中寻找最高优先权的任务,如果当前任务不是最高优先级,发生任务切换,否则仍执行原任务;c.
发生irq,fiq,软中断,取指错误和取数据错误五种异常模式时,直接发生任务切换,中断处理结束后,在任务就绪表中寻找最高优先权的任务,如果当前任务不是最高优先级,发生任务切换,否则仍执行原任务.
A:1.
不一定,如等信号时OSPend(x,0,&err)时.
2.
只有在IRQ,FIQ和软中断受OS管理时才能进行任务切换,同理取指,取数异常在启动阶段的死循环根本谈不上任务切换.
第159问:Q:请问:在移植UC/OS中的软件中断汇编接口程序中取功能号码.
原程序为:如果是在THUMB状态,则为LDRR0,[LR,#-2]如果是在ARM状态,则为LDRR0,[LR,#-4],在清除R0中的最高两位,R0的值就为功能号.
为什么是从LR中取值呢LR的值是进入中断时候保存的PC值吗迷惑!
A:执行SWI指令后,处理器进入管理模式,LR_svc中保存返回地址,顺藤摸瓜,根据LR_svc38就可以取得SWI语句,也就取得了中断号.
第160问:Q:请问及各位高手:OSIntCtxSw()函数分别在includes.
h和OS_CPU_A.
s中有定义,区别在哪程序OSIntExit中调用该函数的时候是不是都是去调用了includes.
h中的宏定义的那个两者各自的应用范围在哪儿我看过一个移植实例上只有一个OSIntCtxSw函数.
请指教!
A:includes.
h中的宏OSIntCtxSw在C中被调用.
第161问:Q:问一个堆栈指针的问题在OSIntCtxSw_1,获取新任务堆栈指针.
LDRR4,[R6]ADDSP,R4,#68;17寄存器CPSR,OsEnterSum,R0-R12,LR,SPLDRLR,[SP,#-8]MSRCPSR_c,#(NoInt|SVC32Mode);进入管理模式MOVSP,R4;设置堆栈指针LDMFDSP!
,{R4,R5};CPSR,OsEnterSum;恢复新任务的OsEnterSum.
.
.
.
.
.
我想问一下:LDRLR,[SP,#-8],这一行程序中,为什么堆栈指针要减去8个字节的值A:这是调整SP的指针,使其指向栈中的LR.
看一看配套《ARM微控制器基础与实战》的图6.
3.
Q:ucos中断丢失.
在ucos在每秒切换200次时正常,但在1000次时中断丢失可能是哪里的问题A:问题已经找到,是随2104中的ucos不支持中断嵌套.
在不嵌套时4000次/秒也是正常的.
第162问:Q:uC/OS-II能在2104上和用户程序一起编译吗一定得分开编译吗《ARM微控制器基础与实战》上介绍的移植方法上是分开编译的,我想合并在一起调试,这样就不必用软件中断去寻找系统函数的入口地址.
要做到这样,是不是只需把OS_TASK_STAT_EN设置为1,OS_SELF_EN为039A:可以,网站上有例子http://www.
zlgmcu.
com/tools/kaifaban/EasyARM2104.
asp.
第163问:Q:请教:我运行OSInit();函数,程序死在SoftwareInterruptBSoftwareInterrupt困惑呀!
A:uc/osii的启动代码与普通的启动代码不同,您使用的是普通的启动代码.
第164问:Q:请问:在UC/OS-II目录中的README.
TXT下,有的例子说:"仅lpc2106有足够的RAM可以在RAM中放入所用代码.
"那么,如果我使用LPC2104,在FLASH中存放运行代码是否能正常运行谢谢!
A:主要看数据是否超出16k,如果超出,请减少任务占用的堆栈.
第165问:Q:请问:在UCOS-II\ex2_arm中,我编译时出现错误提示如下:ERROR:L6221E:executionregionER_R0overlapswithExecutionregionER_ZI.
如何解决而我在UCOS-II\ex1_arm中编译.
运行都正常,谢谢!
A:定义任务堆栈小一点,如"#defineTASK_STK_SIZE128"第166问:Q:uCOS-II\EX2_arm我什么也不动,用ADS打开,可是编译的时候出错,是很多文件找不到.
比如ucos_ii.
h就找不到.
#include".
.
\.
.
\source\ucos_ii.
h"可是我的光盘里没有source这个文件夹啊,还有很多uCOS-II文件也找不到,是不是我的光盘少了东东站上有得下载吗A:要将uC/OS-II(v2.
52)源代程序放到source目录下,北航出版的uC/OS-II书(第二版)带有.
第167问:Q:OSIntNesting(嵌套层数)和OsEnterSum(关中断计数器),有什么区别吗我个人认为这两个变量相同,不知为什么要定义两个变量A:OsEnterSum是关中断的计数器,目的是实现临界段嵌套.
OSIntNesting是中断嵌套层数,目的是实现中断嵌套.
第168问:Q:为何我EX1_FLASH移植的时候总出现如下错误提示,请问是哪里出错了Error:C2933E:typedisagreementfor'OSTaskStkInit'40Os_cpu_c.
cline70A:是调用OSTaskStkInit时类型不一致导致,好好看一下C语言.
第169问:Q:请问:在SWI软中断指令中,LR中放的是异常模式下的返回地址,而这个地址的低8位和低24位分别是thumb和ARM指令下的立即数,这种对应的关系是如何来的还有执行THUMB和ARM指令,LR中放的地址最后的位应是0和00,那么为什么会有swi01swi03这样的立即数呢A:您的理解不对,可以看一看os_cpu_s.
s这个文件.
第170问:Q:2104,2119中都不能用UCOSII的flag的问题.
在模板中ARMExecutableImageforUCOSII(forlpc21xx)加入这个程序文件.
实际上程序运行到KeyFlagGrp=OSFlagCreate(KeyFlags,KeyFlagErr);时就进入Startup.
s的取数据终止,但在没模板的情况下是没问题的,请问哪位在模板中用过UCOSII的flagA:字节对齐问题,请在事件标志结构定义前加__packed.
第171问:Q:我请教您一个问题,在2104里写程序的时候用malloc()来分配内存单元的时候,经常出现在程序中被分配的单元数值在任务切换的过程中被改变的情况,不知道您碰到过没有是如何解决的谢谢!
用ucos中的内存分配函数就不回出现这种问题.
A:请在网上下载最新的模板,其中启动代码有更新.
另外,如果分配太大的空间可能会造成程序跑飞.
第172问:Q:在uC/OS中进入临界代码区时,只是关swi中断,还是将所有的中断都关断.
A:要关所有调用了OS系统服务函数的中断.
一般是IRQ中断.
41第4章芯片第173问:Q:2100实验板的问题.
使用几次RelInFLASH后不能正常工作,包括其他两种方式也不能工作在RelInFLASH和DeBUGinflash时显示一个错误Warnning!
interruptvectorsdataisnotcorrect!
Programyoudownloadedcannotrunfreely!
不知怎么回事使用DebugInRAM虽然不报错,但无法正常工作.
A:可能是启用了加密功能引起的,使用ISP擦除FLASH.
第174问:Q:很有意思,自从买了2100实验板一直在用DebugInRAM,今天想试试DebugInFLASH,后来就选了后者进行调试,奇怪的现象发生了,以后再进行DebugInFLASH之前确切的说是进入AXD在运行之前都显示着我第一次用DebugInFLASH时下装的程序,一运行就可以显示当前程序的结果,每次如此,只要不运行其他程序,实验板上的LED就保持第一次下载的程序的状态,RESET和重新上电都不行,是不是我的这个程序把开机的DEMO替换掉了,哪里可以下载到那个DEMO,我想再装回去.
A:DebugInFLASH就已经把程序下载到FLASH了,原先出厂的程序已被你的程序覆盖.
第175问:Q:我将其按照intle32bithex编译后将hex文件通过ISP下载到2104开发板上为什么没有反映后来再下载C语言编写的同样功能的文件,前几次可以运行,后来又下载了别的程序后就又不能运行了,请问这是什么问题多谢!
A:光盘上的EINT1_LED.
S只适合于在RAM中调试,如果要下载到FLASH中运行,需要加入向量表(且要求向量表累加和为0).
ResetLDRPC,ResetAddrLDRPC,UndefinedAddrLDRPC,SWI_AddrLDRPC,PrefetchAddrLDRPC,DataAbortAddrDCD0xb9205f80LDRPC,[PC,#-0xff0]LDRPC,FIQ_AddrResetAddrDCDMAINUndefinedAddrDCDUndefinedSWI_AddrDCDSoftwareInterruptPrefetchAddrDCDPrefetchAbortDataAbortAddrDCDDataAbort42NouseDCD0IRQ_AddrDCD0FIQ_AddrDCDFIQ_HandlerMAIN.
.
.
第176问:Q:手册上只有I1.
8,而没有I3.
3,无法计算片子功耗.
A:3.
3V与外设相关.
芯片本身在3.
3V中的消耗可以忽略不计.
第177问:Q:通过查看数据手册LPC2119的接地有三种,分别是Vss(0V电压参考点),Vssa(模拟地),Vssa_pll(pll模拟地),三种的电压都为0V,但为了降低噪声和出错几率需要隔离,请问如何隔离电源方面:有两种供电电压,一种是1.
8V(内核),一种3.
3V(I/O口)分别存在隔离问题,请问如何解决吾乃新手,还忘老手不吝赐教,谢谢!
A:与普通的多种地布线类似(它们有多少种方法就有多少种方法),最终这些地线还是要接到一起.
第178问:Q:请问LPC2119的电源芯片选哪款较为合适有没有推荐的匹配A:与2104一样,可选SPX1117.
第179问:Q:我现在数字电路除LPC2114使用3.
3V电压外,其余的大部分是5V的.
我想先将LPC2114连接到CPLD,再连接到其它电路(CPLD的I/O口可以输出或输入5V)不知道行不行.
谢谢.
A:我觉的简单的电路可以用LVC芯片,必要时可以用3V的CPLD.
第180问:Q:请问:你们公司的ARM芯片相对于象44B0X等等一系列的ARM处理器的优点在那里好象LPC2104还比较的贵啊!
现在我正在考虑选择ARM芯片的问题,望回答.
谢谢A:我们的LPC210X内部有FLASH和RAM,LPC211X为工业级适用于工控领域,并且是全球唯一可加密的ARM.
以整个系统成本来说,LPCARM内部有FLASH和RAM,低功耗,可加密性价比更高.
具有ARM的性能,单片机的特点,在许多应用场合比其它的ARM更优越.
第181问:43Q:我的2214板IO口和中断均能正常工作,今天准备调显示器,显示器接在CS2上,8位数据线,通过查资料,得cs2的地址空间为82000000,于是我将命令口地址定为0x82000001,数据口地址定义为0x82000000,对啦,数据命令切换线在A0上,在显示器初始化前,对CS2进行了配置,即BCFG2&=0XCFFFFFFF,即除修改成8位数据线外,其它均不变,对显示初始,定时送显示器,但是测量CS2口线,根本不出现低电平,更不用说数据线啦,即好像外部总线根本没有工作.
之后根据2214的模板,从新设置了参数,结果写信号出不来,片选,读地址,数据均有.
PINSEL2=0x0f814910;BCFG2&=0xcfffffff;//CS2,8位数据线,请问,配置外部总线还需要其它寄存器吗,由于手上没有这方面的资料,请给予帮助.

谢谢!
A:注意BCFG2的写保护位.
第182问:Q:请问:关于LPC2214的BOOT0和BOOT1的用法.
前提:我使用内部FLASH作为程序存储器,利用外部总线CS0扩展一片并口的12位AD,CS1扩展并口的液晶,CS2扩展一片RAM芯片.
我的想法:将BOOT0和BOOT1上拉,系统上电启动后,检测到11,那么从内部FLASH启动,之后我可以设置管脚的选择寄存器,使能CS0和CS1和外部总线,那么我就可以随时的利用它的地址访问我的外部扩展的设备.
请问我的想法对吗,并请指点一下我应该注意的相关的问题.
A:正确.
第183问:Q:请问:2214外扩SST39VF320在CS1上为什么读ID不正确程序如下://设置PINSEL2位#defineP1_26_31_Debug4//JTAGD2#defineP1_16_25_Track8//跟踪D3#defineP2_Data_Bus0x10//D0-15IO(D5D4=01)#defineP3_27_WE0x100//写信号D8#defineP3_26_CS10x800//D11#defineP3_25_CS20x4000#defineP3_24_CS30x10000#defineP3_0_23_ADDR0x0f800000//地址总线//PINSEL0=P0_0_15_Set;#definePIN2Set(P1_26_31_Debug+P1_16_25_Track+P2_Data_Bus+\P3_27_WE+P3_26_CS1+P3_25_CS2+P3_24_CS3+P3_0_23_ADDR)#defineSST39VF320_Com_Add1(*((volatileunsignedlong*)0x81005555))#defineSST39VF320_Com_Add2(*((volatileunsignedlong*)0x81002aaa))#defineSST39VF320_ID1_Add(*((volatileunsignedlong*)0x81000000))44#defineSST39VF320_ID2_Add(*((volatileunsignedlong*)0x81000001))voidInitGPIO(){PINSEL2=PIN2Set;BCFG1=0x10000000;//16位}voidCheck320(void){SST39VF320_Com_Add1=0xaa;SST39VF320_Com_Add2=0x55;SST39VF320_Com_Add1=0x90;//Delay_150_Nano_Seconds();//ReadtheproductIDfrom39VF320SST_id1=SST39VF320_ID1_Add;//读出ID不对SST_id2=SST39VF320_ID2_Add;//读出ID不对SST39VF320_Com_Add1=0xaa;SST39VF320_Com_Add2=0x55;SST39VF320_Com_Add1=0xF0;}A:CPU的A0不能不能接,另外地址也要相应的变化(针对FLASH的地址和针对CPU的地址不一样).
第184问:Q:请问1.
8V电源和3.
3V电源的跳线要同时供电吗分别是给谁供电的A:一个是给核心(内核)供电,一个是给I/O口供电.
第185问:Q:1.
ARM的P0.
1(WR),P0.
4(RD)为何不直接和以太网控制芯片的IOWB,IORB相连NETCS起什么作用2.
网卡控制芯片的INT0为何要接一个反相器和ARM的P0.
7相连3.
我能否直接连接到ARM的P0.
16(外部中断0输入)口呢4.
8位数据线和5位地址线怎么实现分时复用A:1.
使用片选选择,NETCS就是片选信号.
2.
因为8019的中断是输出高电平,为了适应所选芯片,所以加反相器.
3.
如果所选芯片支持低电平或跳变触发,就可以不用加反相器而直接与外部中断输入相连.
4.
加锁存器.
第186问:45Q:目前210x的各功能均试验完毕,现在想知道的是其IAP功能是否可以向PSD产品那样实现远程的程序更新如果可以,那么当程序代码写入FLASH后如何让程序转到更新后的程序PSD是通过寄存器来完成转换的,那么210x如何实现呢比如210x的程序是从0地址开始执行的,假如原代码长2FFFH,现在更新后的程序长3500H,那么在IAP时只能将代码写到非00000000~00002FFFH区域FLASH中,写完后该如何让当前程序停止而转到更新后的程序呢PSD产品是因为有2块存储器,在执行当前存储器中程序时可对另块存储器写操作,写完后在将执行权交给另块存储器.
期待您的回复!
A:如果,你的程序较小(64k),你就把它当作两块独立的FLASH(多个扇区).
写入其中一块,另一块空着.
.
.
程序开始执行的时候,判断哪一块是最新的,跳转过去就行了!
一旦从外界收到"更新程序"的命令,检验数据,更新另外一块,就行了!
接收完毕,烧写结束,写入最新程序标志.
立即跳过去.
下一次开机,执行最新的.
这个方法,比较安全.
可以防止中途通讯结束,复位等.
如果你的程序比较大,有点悬……至少,在某些干扰环境下,不要那么做.

第187问:Q:开发板实验中delay_ns(uint32dly)在上述条件下是延时dly秒吗如是则执行速度似乎并不快怎么估计出来的呢A:如果程序和数据均在片内RAM中,这样计算:1.
一般指令需1个主时钟时.
2.
每次跳转增加3个主时钟时间(也许是2个,需要确认).
3.
从RAM中取一个操作数多增加一个主时钟时间,以此类推.
4.
保存一个结果到RAM中多增加一个主时钟时间,以此类推.
5.
访问片内外设,增加一个外设时钟时间.
注意伪指令ldrrn,=x需要从ram中取一个操作数.
第188问:Q:请问如果lpc2104和5V的芯片字节连接,中间不接小电阻,会怎样对系统有没有很大的影响A:不安全而已.
第189问:Q:2104的功耗最大在多少,(考虑外设全部工作,功率损耗)EASYARM板上提供的电源最大输出电流好象只有300mA哦.
A:芯片本身功耗最大值小于70mA(120摄氏度,核2.
1V供电,运行于60MHz).
一般情况小于50mA.
IO口耗电(即3.
3V耗电)与其它电路密切相关,实质是其它电路在消耗电源(ARM本身对3.
3V的消耗是极小的).
46第190问:Q:LPC2114替换LPC2104的话,我的程序还需要做哪些变动哪些内部专用寄存器的地址是否变动还有,我原来设计电路用的是LPC2104的次要JTAG口,现在换到LPC2114上来,需要怎么改电路A:程序无需改动,JTAG设计时在RTCK接一个4.
7k的下拉电阻即可.
第191问:Q:有一问题请教,在市场上买的ARM核单片机的程序用ADS1.
2建立项目,添加初始化程序vectors.
s,init.
s,target.
c和target.
h后再写自己的主程序,编译烧录到ARM中即可投入使用了吗而有的ARM嵌入式系统中还有bootloader,那是不是利用ARM开发的产品都要bootloader,而bootloader是通过什么软件编译的我所买的easyarm开发板的lpc2104中有bootloader吗A:bootloader是用来下载程序到FLASH中的,LPC210x具有ISP功能,可直接使用ISP下载程序,不需要自己编写bootloader.
第192问:Q:我想用IAP把数据存到2104的FLASH里,可我怎么读出来呢A:定义一指针,指向你用IAP写数据的那个区域,就可以读了.
第193问:Q:当PLLCFG设置为0x05时的效果和设置为0x25时一样,但晶振是11.
0592MHz的,如果设为0x05,Fcco的范围不在156M-320MHz,为什么还可以用,而且和其它没有区别A:手册说明的是保守值.
实际的芯片的Fcco可能在更大的范围可以工作.
第194问:Q:WDT复位后从地址0开始执行吗运行程序5.
40后,WDT复位后并不是从地址0开始执行,却跑去执行[0x07806808]dcd0x07806808,并一直执行此语句.
如何才能从地址0开始执行A:WDT复位后是从0开始执行程序.
可在复位处设置一些外部现象(如LED闪烁),然后脱机运行.
第195问:Q:我运行光盘上原始的IAP程序例子,使用它的project是正常的,但我自己重新建一个目录和project,参数设置按照原来工程的设置,编译出来的axf文件就是会在运行到第一个SelSector(1,1)时无法继续下去,我自己的axf文件和光盘上的一样大16kB,究竟是怎么一回事有一处设置LanguageSettings里的ATPCS项有什么意义其他47工程好像没有选择这一项.
A:IAP是THUMB指令,如果用户程序是ARM指令,所以调用时需要使用BX指令.
则C编译器的ATPCS项要设置"ARM/Thumbinterwork.
.
.
".
第196问:Q:LPC2104具有6个PWM,可以应用与电机控制,可是却没有计数器进行电机转速的PID闭环控制,这个情况是不是lPC2106的一个缺陷呢如果不是,那应该怎么样才能进行外部脉冲的计数在不用外加计数器的情况下!
很是困惑!
A:捕获算周期.
第197问:Q:ISP通讯的问题.
自己做的板子,使用ISP下载程序,提示无法通讯.
板子上使用了跳线使得44脚和地连通,也通过max3232进行电平转换了.
还有复位电路感觉也一切正常.
不知道为什么就是无法通讯.
好晕啊,各位成功下载的大侠们指点一下吧.
试了好几天了,都没法成功.

A:你确保了max3232过来的电平正确了吗如果正确了,还要确保通信方向是否弄反,最后注意复位信号是否正确.
A:搞定了,原来是max3232的问题,现在已经可以下载程序了!
第198问:Q:如何用ISP软件擦除FLASH中的内容啊我在调试UART0串口程序的时候出现问题,上网看到很多文章都建议要先擦除FLASH中已有的内容,于是用ISP软件进行擦除.
但是在使用该软件过程中,按到很多钮都说:串口不能正常工作.
这是什么原因啊请教高手正确使用ISP软件的方法及注意事项.
A:看看你的跳线是不是按要求接好了!
!
第199问:Q:EasyArm2104开发板上的ISP下载的时候通讯不上.
请问,要跳JP6吗A:您可以自己试一下:1.
是不是接的UART0口2.
系统晶振(XATL.
Freq)是不是11059.
2kHz3.
串口选择是否正确4.
要求你复位的时候你是否有复位5.
ISP使能跳线使用JP1(JP6和JP7保持主JTAG调试状态)!
第200问:Q:请教高手,lpc2104和lpc2114外部晶振接法原来我用LPC2104做的板子,外部晶振接到X1时不可用.
后来接到X2上时好象可以用,但这与资料上的说法好象有点出入.
现在我想换LPC2114改版,但不想再次改版了.
故在此请教外部晶振接法48A:使用外部无源晶振,晶振两个管脚无需连接,与51单片机基本一致;时钟信号由X1输入.
第201问:Q:请问有没有工业级的21**系列A:lpc2114等芯片就是工业级的.
第202问:Q:读LPC2119/2129/2194/2292/2294使用指南之迷惑.
1.
对于2292/2294,开放了外部总线,程序应该可以放到外部,外部和内部的存储空间地址不连续,如何保证程序超过128K后自动跳转到外部执行程序2.
VIC部分,VIC通道号17#和18#都是EINT2,是什么意思难道一个中断源占2个号EINT3的VIC通道号是多少3.
我购买的芯片是否内部已经有了Boot装载程序A:1.
使用分散加载.
2.
可能是笔误.
3.
有.
第203问:Q:请问用LPC2104扩展D12有没有问题A:可以使用模拟总线,速度比51快几倍.
第204问:Q:请教:LPC2114的V3能否接2.
8V系统有多个外设,有一个使用2.
8V±5%的电平接口,其它使用3.
3V,那么LPC2114的V3怎样接V3接2.
8V电压基准是否可以,口线与其它3.
3V的接口能否直接相连A:建议不要超出手册说明的范围使用芯片.
第205问:Q:我自己做的板子,把2104的44脚(EINT1)接地,再利用LPC210XISP软件通过串口0往芯片里写程序,为何按了复位键以后连芯片的ID都不能读到A:应该检查如下几点:1.
确保你的芯片在工作.
一般可以查看芯片的几个电源是否都正确,查看晶体是否有波形,最好还可以看看各电源的纹波是否严重.
2.
确保电平转换芯片的正确工作,以及各输入输出的正确.
这个方向最容易弄反.

3.
查看复位端的电平是否正确,复位按健正常.
4.
确保44脚接地.
49第206问:Q:请教如何通过2104的串口1来往芯片里写程序A:使用ISP功能,不能用串口1,只能用UART0.
第207问:Q:请教ARM2104配套《ARM微控制器基础与实战》上第一个实验的问题.
在ADS1.
2中编译以下程序后进入AXD进行调试成功.
程序稍加修改,使LED1.
.
LED4同时闪烁,在ADS1.
2中编译以下程序进入AXD调试成功.
问题:两个程序的软件延时部分相同,但两个程序使LED的闪烁间隔时间不同,不知是何原因A:可以先使用ISP将芯片FLASH擦除试试,可能是FLASH程序设置PLL的缘故.
第208问:Q:1.
《ARM微控制器基础与实战》上说32字节的向量表的累加和必须为0才可脱机运行,是否需要每次修改程序后修改第六个保留向量的值(因为地址有改变).
2.
《ARM微控制器基础与实战》上说用ldrpc,resetaddr指令代替b指令可全空间跳转,但是我看指令说明ldr指令的地址只能是当前地址的+-4k呀!
A:1.
不用修改.
2.
请看书.
第209问:Q:关于2119的can的通讯问题,就是2119的波特率的设置与SJA1000有什么不同A:基本上一致,将ARM7的Fvpb与SJA1000的晶振对比:BRP,SJW,TSEG1,TSEG2均是同样的设置方法,需要计算,可参照SJA1000中位定时参数的计算方法.
第210问:Q:请问各位高手.
新买的ARM芯片是不是直接安装上去就可以直接下载程序工作了了吗,还需要有什么别的设置吗.
A:LPC2000系列有片内FLASH的都可以直接ISP,不过要保证硬件正常.
第211问:Q:2119实时时钟电池怎么供电所有的电源引脚都要供电吗A:没有独立的电池供电引脚,以后会推出RTC独立晶振和备份电源接口的型号.
不太适合电池供电,除此以外,功能还是很强的.
第212问:50Q:在调试实验程序的时候,把低功耗掉电模式实验代码PDRUN编译后下载到2104FLASH以后,程序正常运行了.
可是再DEBUG程序时,在AXD下总是提示错误:Error:flashisuserconfiguredprotected我能明白这个是因为2104一直处于掉电模式的原因,可是如何解除这种状态,把现在FLASH里的这段程序擦除掉啊A:通过ISP软件擦除.
第213问:Q:请教关于"IAP实验的问题"《ARM微控制器基础与实战》359页的IAP实验是用汇编写的,然而在光盘上IAPtest实验的程序是用C编写,其中提到本实验是调用IAP服务程序.
请问:1.
IAP服务程序放在了什么地方(汇编部分)2.
我想向其中写入10字节数据,而不是诸如256个字节,是否可以,如何实现3.
在主程序中定义一个数组,如何把此数组中的数据固定在特定地址中阿,然后我好进行RamToFlash.
A:1.
在BOOT区,入口地址为0x7ffffff0,IAP服务程序为THUMB指令.
2.
先读取原数据到RAM中.
如果只需要保存小量数据,且经常要更改,最好使用外部E2PROM.
3.
可能不好实现,参考ADS帮助手册吧.
第214问:Q:请问LPC2104系统为什么采用11.
0592Mhz的晶振,是在定时上有优势还是其他原因.
A:选用11.
0592MHz只是为了得到精确的通信波特率,串口通信的可靠性高.
第215问:Q:请教:lpc2104和RTL8019AS的接口问题.
以前在C8051F上做,高低地址是固定的,容易接口,RTL8019映射地址也容易算出.
现在lpc2104是32位的,32个地址线和32个数据线,和外围器件接口时带到很困惑.
不知有没有高手看过周立功网站的提供的lpc2104+RTL8019AS的接口电路,SA0-SA4和lpc2104的哪个脚接在一起请指点由一个573来控制地址与数据总线复用现在有点明白虚拟总线了,加上一个地址锁存器,和51机的就很相似了.
A:对,为了兼容51.
第216问:Q:开发板上的74HC125的U5C,U5D起什么作用A:去抖动.
第217问:Q:请教:在2100开发板的ADC实验(P119面)中为什么每次AD转换都要启动两次51A:切换通道后,丢弃第一次ADC转换值.
第218问:Q:如果我的AD转换需要的满量程是0V~5V,是不是把AD部分的电源即V3A由现在的3.
3V改为5V供电就可以了A:把输入的电压用电阻分压就可以了.
第219问:Q:疑问:2104开发板上用了MAX708,其已有高/低电平复位输出,为什么还要用74HC125呢A:为了使手动与JTAG都可以对芯片复位.
第220问:Q:请教高手关于自己做板子的问题.
我自己做了一个2104的板子,第一次上电可以通过串口顺利地把.
hex文件从串口写入flash,然后再次上电,程序就不执行了,并且再次用周立功公司提供的ISP软件却无法访问该芯片.
同样地程序我放到周立功地2104的开放板用同样的步骤,它却能正常运行,我的板子基本上是按《ARM微控制器基础与实战》上的图制作的,请指点我的问题可能的原因在哪里请教自己做板子容易出错和注意的地方.
A:重新上电试试.
P0.
14口是否已接为低电平测一下晶振是否起振Q:晶振测过已经起振,运行自己的程序不是要把P0.
14口断开吗用ISP软件下载程序的时候才把P0.
14接地是不是A:需要ISP时P0.
14口接地;需要运行用户程序时,P0.
14口要接一个上拉电阻,因为P0.
14内部无上拉(作为输入时).
第221问:Q:请问2104的复位电路我不用MAX708和74HC125,做成象51单片机那样的复位电路可以吗A:做成这样是为了保证JTAG接口和按钮,上电都可以复位芯片!
实现线与逻辑,如果你不需要调试只是生产的话,完全可以那样设计复位电路.

第222问:Q:关于REMAP请问remap的时候只要给MEMMAP赋值就好了吗具体的中断向量表的映射系统自动给你生成在启动代码中关于remap我只看到赋值,而在《ARM微控制器基础与实战》上写了一段重映射的代码示例P280程序清单5.
2.
52如果系统自动remap的话,那么映射到的地址空间我们没法改动了代码中,通过Blable1或blLable2进行跳转时,要不要进行栈的操作如果调用的是c语言函数,除了传递必要的参数,有没有保存寄存器呢A:中断向量表不是系统自动生成的,是由用户编写.
Remap通过改变MEMMAP的值实现.
请看一下"ARM-Thumb过程调用标准"(ATPCS.
pdf)这篇文档.
安装ADS后就有.
第223问:Q:请问:lpc2104运行速度ARM7TDMI(-S)能提供0.
9MIPS/MHz的指令执行速度,lpc2104cclk为60MHZ时指令执行速度应为0.
9*60=54MIPS,这样得到一条指令的执行速度大概为0.
018us.
可我用示波器观察计算得出一条指令的执行时间远远大于这个数值,大概为0.
1us-0.
8us(可能由于流水线的影响,指令执行时间的差别很大).
这是怎么回事呀A:这是一个在存储器带宽足够时的平均值.
如果程序和数据均在片内RAM中,这样计算1.
一般指令需1个主时钟时间2.
每次跳转增加3个主时钟时间(也许是2个,需要确认)3.
从RAM中取一个操作数多增加一个主时钟时间,以次类推4.
保存一个结果到RAM中多增加一个主时钟时间,以次类推5.
访问片内外设,增加一个外设时钟时间注意伪指令ldrrn,=x需要从ram中取一个操作数.
在flash中如果MAM配置为最优,平均速度与在ram中相差无几.
第224问:Q:请教斑竹关于211x和22xx系列P1.
16-P1.
25这些引脚的作用另外在开发版上除了JTAG口外,上述引脚是否用到在设计自己的系统时,如果将P1.
16-P1.
25这些脚作为普通输入输出口用,是否会影响系统的调试A:ETM跟踪端口.
一般JTAG仿真器不使用这些引脚,所以设计自己的系统时用作I/O即可.
不会影响调试.
第225问:Q:请问,请问评估板上的S-1131B哪里能订购到,或者有什么替换型号.
谢谢A:SPX1117M3_1.
8和SPX1117M3_3.
3.
http://www.
zlgmcu.
com/Sipex/power/SPX1117.
asp.
第226问:Q:关于P2104的驱动能力!
我正在用2104外接LCD其中用P0口模拟总线我的了LCD电压是5V的,而2104是3.
3V的,能否直接相接我没接时还有信号输出但接上之后就什么信号都没有了,请问是何缘故是否需要电平转换芯片或驱动芯片上拉电阻能否满足要求A:中间串一个小电阻试一试.
我们接过多种总线器件都没有问题.
53第227问:Q:问一下,lpc2104的I/O的驱动能力单个I/O可以走多大电流全体I/O可以走多大电流A:数据手册上有,Ioh,Iol.
第228问:Q:2119最高频率可达60MHZ,在频率比较高的时候应该使用几层的电路板,有没有确切的规定A:不知道什么时候有人就把PCB的层数与频率划上了一个必然的关系.
60MHz很高吗看看你的调频收音机,FM波段范围是88-108MHz,内部部本振频率可达118.
7MHz,1层板!
看看电视机里头的电路板,高频盒内一般最多就2层板(还是一层的居多)它跑多高的频率自己查查UHF的范围吧,记得保持冷静因为没有什么值得去惊讶的!
再有几年前拆过一个GIGA的游戏机,音频部分的PCB是4层板(独立的小板),小日本的东西元器件密密麻麻的,看看这个它又能是跑多高的频率况且现在数字电路的电平容差相对于模拟电路的至少有一个数量级的差别.
在高频模拟电路下,多一块覆铜可能就使电路的性能下降或工作点异常,例如它可能使电感特性器件的Q值下降,产生涡流耗损等.
很多时候增加PCB的层数决不是单纯因为系统速度,你所说的60Mhz也只是芯片内部的系统时钟,难道你的IO也要作为时钟源使用吗在ARM中采用PLL技术使得外部时钟可以下降到一个较低的水平,则可以抑制部分由时钟电路产生的射频干扰,有较好的EMC,EMI特性,一个合理的PCBlayout可能比盲目增加PCB层数的方法提高系统的稳定性来得更合理和有效!
看你是想做精品还是想做产品或其他,这就要综合多方因素考虑了.
无可否认,增加PCB的层数后比较容易的处理一些由于电源寄生干扰产生的问题,适当配合layout可以满足一些速度(时序)要求苛刻的电路.
由于现在元器件体积日渐小型化,PCB上元器件密度大,很多时候单面或双面的layout实现已经非常困难,增加PCB层数是为了更好的使设计变得合理和可靠.
第229问:Q:ARM抗干扰能力怎样,是否低压器件一定比高电压器件抗干扰能力弱谢谢!
A:我们用自己的开发板打群脉冲到最高都正常工作(程序没有任何抗干扰措施).

美国高防云服务器 1核 1G 26元/月 香港/日本站群服务器 E5 16G 1600元/月 触摸云

触摸云国内IDC/ISP资质齐全商家,与香港公司联合运营, 已超8年运营 。本次为大家带来的是双12特惠活动,美国高防|美国大宽带买就可申请配置升档一级[CPU内存宽带流量选一]升档方式:CPU内存宽带流量任选其一,工单申请免费升级一档珠海触摸云科技有限公司官方网站:https://cmzi.com/可新购免费升档配置套餐:地区CPU内存带宽数据盘价格购买地址美国高防 1核 1G10M20G 26...

HostYun全场9折,韩国VPS月付13.5元起,日本东京IIJ线路月付22.5元起

HostYun是一家成立于2008年的VPS主机品牌,原主机分享组织(hostshare.cn),商家以提供低端廉价VPS产品而广为人知,是小成本投入学习练手首选,主要提供基于XEN和KVM架构VPS主机,数据中心包括中国香港、日本、德国、韩国和美国的多个地区,大部分机房为国内直连或者CN2等优质线路。本月商家全场9折优惠码仍然有效,以KVM架构产品为例,优惠后韩国VPS月付13.5元起,日本东京...

AkkoCloud(60元/月 ),英国伦敦CN2 1核 768 MB 内存 10 GB SSD 硬盘 600GB 流量 英国伦敦CN2 1核  1.5G  300Mbps

官方网站:https://www.akkocloud.com/AkkoCloud新品英国伦敦CN2 GIA已上线三网回程CN2 GIA 国内速度优秀.电信去程CN2 GIALooking Glass:http://lonlg.akkocloud.com/Speedtest:http://lonlg.akkocloud.com/speedtest/新品上线刚好碰上国庆节 特此放上国庆专属九折循环优惠...

创建邮箱为你推荐
美国免费主机免费主机可以建几个站?服务器空间租用租用服务器一年我要交多少钱国际域名请问国际顶级域名有什么?美国虚拟主机空间请经验丰富的高手给指导一下,我想选择适合个人网站应用的美国虚拟主机(空间),都是哪些服务商比较好?asp主机sulzer主机类型有哪些已备案域名查询已经有个顶级域名,怎么查询是否备案?域名备案查询如何查询自己域名是否备案,怎么查询备案号?空间域名服务器和空间域名什么意思云南虚拟主机云南虚拟主机,公司网站用本地客户,云南数据港怎么样?shopex虚拟主机支持shopex网店程序的虚拟主机推荐 要求稳定的 价格2000-300左右 1g的就行
北京服务器租用 河南vps 12u机柜尺寸 xen 国内php空间 元旦促销 新天域互联 老左来了 me空间社区 lol台服官网 可外链相册 360云服务 cloudlink 河南移动梦网 英国伦敦 德隆中文网 华为云建站 iki 好看的空间 网站防护 更多