首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

hcs12 flash 下载的问题

hcs12 flash 下载的问题

我把主程序main放在 unpaged区($3f)中,子程序放在一个paged区(比如$31)下载以后,子程序没有进到flash中,但主程序在。


如果我把子程序放在另外一个unpaged区($3e),就都可以正常工作,这是为什么,怎样才能把程序写道paged区中去,谢谢

the same question

请问各位大侠如何将程序下载到分页flash当中?
如果用C编写会自动放进去的。
如果要放固定的地址,用CW编写的话需要设置prm文件
prm文件中
SEGMENTS /* Here all RAM/ROM areas of the device are listed. Used in PLACEMENT below. */
RAM = READ_WRITE 0x0400 TO 0x0FFF;

/* unbanked FLASH ROM */
ROM_4000 = READ_ONLY 0x4000 TO 0x7FFF;
ROM_C000 = READ_ONLY 0xC000 TO 0xFEFF;

/* banked FLASH ROM */
PAGE_3C = READ_ONLY 0x3C8000 TO 0x3CBFFF;
PAGE_3D = READ_ONLY 0x3D8000 TO 0x3DBFFF;
/* PAGE_3E = READ_ONLY 0x3E8000 TO 0x3EBFFF; not used: equivalent to ROM_4000 */
/* PAGE_3F = READ_ONLY 0x3F8000 TO 0x3FBFFF; not used: equivalent to ROM_C000 */
END

PLACEMENT /* Here all predefined and user segments are placed into the SEGMENTS defined above. */
_PRESTART, /* Used in HIWARE format: jump to _Startup at the code start */
STARTUP, /* startup data structures */
ROM_VAR, /* constant variables */
STRINGS, /* string literals */
VIRTUAL_TABLE_SEGMENT, /* C++ virtual table segment */
NON_BANKED, /* runtime routines which must not be banked */
COPY /* copy down information: how to initialize variables */
/* in case you want to use ROM_4000 here as well, make sure
that all files (incl. library files) are compiled with the
option: -OnB=b */
INTO ROM_C000/*, ROM_4000*/;
DEFAULT_ROM INTO PAGE_3D, PAGE_3C;
DEFAULT_RAM INTO RAM;
END

在C文件中
#pragma CODE_SEG NON_BANKED //放在ROMC000中
void delay(byte i)
{
..
}

#pragma CODE_SEG DEFAULT //放在Page 3D,3C中
void main(void)
{
...
}



如果子程序单独作为一个工程,下载到指定的分页FLASH,然后在主程序中调用子程序的入口地址,是完全可以调用的!注意:子程序入口地址要加上PPAGE!如:写到38页,子程序入口地址为$388000.
我用的是汇编程序试过的
生命就是奇迹,永远都不要放弃希望,哪怕光亮渺小如豆,我们都要坚持举着它,即使烛火灼伤了皮肤,我们也不能失手,否则我们将永远在黑暗之中。
在调用分页FLASH中子程序之前将“PPAGE=放置的页码”就可以了,但是不知道有什么影响
yuccacl
返回列表