能不能请教一个问题啊,就是IAR汇编语言有条指令ORG 1100H,
应该是指定程序的起始空间吧,程序将程序烧录在0x1100开始的空间地址,
那想问一下,C语言怎么写这条指令呢?
你纠结这个问题做什么?程序空间分配在IAR中有专门 的文件可以分配的啊,C语言写不用考虑这种问题吧,有一个.XCL文件可以分配的
// ---------------------------------------------------------
// Code 代码空间
// ---------------------------------------------------------
-Z(CODE)CSTART,ISR_CODE=1100-EFDF
-P(CODE)CODE=1100-EFDF
// ---------------------------------------------------------
// Interrupt vectors 中断向量空间
// ---------------------------------------------------------
-Z(CODE)INTVEC=EFE0-EFFF
-Z(CODE)RESET=EFFE-EFFF
回复 沙发 kingheimer 的帖子
还是和上次问你的那个问题相关的,我要专门写boot loader程序,用于升级程序的,那boot loader程序有一个存储空间,另外通过boot loader程序写入的应用程序也有一个空间,但是我需要准确的定义boot loader的存储空间,以便在下载应用程序时候复写到boot loader的存储空间啊!
回复 板凳 零晨 的帖子
这样你可以分别定义好两个程序的空间就行,BOOTLOADER的工程里你把xcl文件里的空间重新定义好,在自己的应用程序时用另一个xcl文件,里面的程序空间合理安排好就行了,比如BOOTLOADER里安排如下
-Z(CODE)CSTART,ISR_CODE=1100-2000 //原来是1100-EFDF
-P(CODE)CODE=1100-2000
你的应用程序修改如下
-Z(CODE)CSTART,ISR_CODE=3000-EFDF //原来是1100-EFDF
-P(CODE)CODE=3000-EFDF
回复 4楼 kingheimer 的帖子
兄弟啊,你知道IAR用C语言编译后,怎么将代码导出为hex文件啊,原本的是*.d43文件吧,不知道这是什么格式,直接在IAR里打开也没有内容啊!
回复 4楼 kingheimer 的帖子
但是,就算我修改了代码空间的地址,那我怎么确认应用程序的起始地址就在0x1600呢,因为开机首先是从0x1100运行(就是boot loader的程序),在10s内不进行boot loader的话,程序跳转至0x1600应用程序执行,所以我要保证0x1600是应用程序的起始地址,只是修改代码空间能做到么?
void main(void) @ 0x1600
{
__do something.
}
回复 7楼 lcofjp 的帖子
请教了,这条指令下了以后,提示出错,出错内容为:
location address not allowed for functions.
这是为什么呢?
我下的是(MSP430F2132)
void main(void) @ 0xe200
{
...........
}
引用: 原帖由 零晨 于 2012-3-7 11:06 发表
请教了,这条指令下了以后,提示出错,出错内容为:
location address not allowed for functions.
这是为什么呢?
我下的是(MSP430F2132)
void main(void) @ 0xe200
{
...........
}
这种方式出错的,我以前回过你的帖子嘛。自己去搜搜
回复 10楼 鸵鸟蝈蝈 的帖子
不好意思,兄弟,问一下啊,如果片内有两个程序,一个boot loader,一个是应用mai(),复位从boot loader程序开始,那设定一段时间后需要跳至main()运行,那在boot loader里用C的那条指令可以实现啊,汇编是用BR指令的!
回复 沙发 kingheimer 的帖子
不好意思,兄弟,问一下啊,如果片内有两个程序,一个boot loader,一个是应用mai(),复位从boot loader程序开始,那设定一段时间后需要跳至main()运行,那在boot loader里用C的那条指令可以实现啊,汇编是用BR指令的!