首先,我有个小问题,你要求算的是2+4+8+……+100,是不是2的1次方,2次方,3次方?如果是,那应该是2+4+8+16+32+64,怎么有还加100呢?或者你笔误,应该是2—100之间的偶数相加呢?
好,下面来解决你的问题:
1.用ADS1.2运行你的加法程序,要注意一点就是ADS不能直链接运行C遍出来的程序,要用汇编代码启动。下面是启动代码startup.s文件(我空间有关于这个代码的分析,你可以去看看):
IMPORT |Image$$RO$$Limit|
IMPORT |Image$$RW$$Base|
IMPORT |Image$$ZI$$Base|
IMPORT |Image$$ZI$$Limit|
IMPORT Main 声明C程序中的Main()函数
AREA Start,CODE,READONLY 声明代码段Start
ENTRY标识程序入口
CODE32声明32位ARM指令
Reset LDR SP,=0x40003F00
初始化C程序的运行环境
LDR R0,=|Image$$RO$$Limit|
LDR R1,=|Image$$RW$$Base|
LDR R3,=|Image$$ZI$$Base|
CMP R0,R1
BEQ LOOP1
LOOP0 CMP R1,R3
LDRCC R2,[R0],#4
STRCC R2,[R1],#4
BCC LOOP0
LOOP1 LDR R1,=|Image$$ZI$$Limit|
MOV R2,#0
LOOP2 CMP R3,R1
STRCC R2,[R3],#4
BCC LOOP2
B Main 跳转到C程序代判差码Main()函数
END
2. 启动代码写好后,再编写C代码,运行你的程序(按你的意思算)
#define uint8 unsigned char //这两个宏定义是ADS里面防止数据溢迹冲好出带的
#define uint32 unsigned int
#define N 100
uint32 sum
// 使用加法运算来计算2+4+8+……+N的值。
void Main(void)
{ uint32 i
sum = 0
for(i=0i<=Ni=i*2)
{ sum += i
}
while(1)
}
3. 这两个程序合在一起才是是完整的ADS实现程序,希望可以解决你的困惑。姿铅
祝你进步!
本人初学ARM,购2104开发板已一个多月,看了实验板的穗销亩相关资料和书,对LPC2104已有所了解。安装了ADS及EASYJTAG软件,按照资料提供的步骤进行了一些实验(光盘中的)都可进行调试并通过EASYJTAG下载到实验板上。今天想自己创建工程,用实验板提供的工程模板选择ARM Executable Image for lpc21xx创建工程,工程创建后在user文件夹中添加ledcon.c文件,然后进行编译,编译通过并进入AXD调试,也可下载到实验板,说明 *** 作步骤没有猜森错。但本人想用汇编程序调试却出现了问题,编译不能通过。请问是否 *** 作不正确还是有哪些设置错误。 具体 *** 作如下:选用asm for lpc21xx(也选用过ARM Executable Image for lpc21xx也不行)创建工程,工程创建后在user文件夹中添加ledcon.s文件,然后进行编译(LPC2106.INC文件已复制到工程所在的文件夹内)却出现以下提示:Error : L6218E: Undefined symbol main (referred from Startup.o). Not enough information to list the image sizes and/or totals. Finished: 1 information, 0 warning and 1 error messages. 请问是什么斗携原因? 工程的target文件及中只包含startup.s文件,文件描述如下:lpc21xx的启动代码,包含异常向量入口、初始化堆栈的代码等每个工程应当有独立的这个文件的拷贝,并进行相应的修改。 工程中没有包含其他的启动文件(用ARM Executable Image for lpc21xx创建就会多了如下的文件:stack.s、heap.s、target.c)。 请问该如何 *** 作?ads1202cal系统必须安装驱动。建立新项目,在窗口中复制光禅胡盘上的实验程序中启动代码下的所有文件到刚才新建的项目目录下,给该项目添碰皮加源文件,新建并添加用户主文件,在文件中自己编写c语言代码。扩充最笑袭差小代码框架,编写完整程序,进行相关设置,编译,AXD调试后完成。
新手入门多出现编译出错,可把路径修改后再调试即可。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)