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

[求助]关于startup.c文件

[求助]关于startup.c文件

先说说我的理解:startup.c文件完成了RAM的初始化,分为这样几个功能:堆栈指针的定位、全局变量的初始化(其中无初值的变量给清零,有初值的变量从rom区中拷贝初值到RAM的对应位置)、最后是跳转到Main函数。这里我没有看到堆的初始化。
我的问题:
首先是栈是如何定位的,有这样一句“extern char __SEG_END_SSTACK[];”,这个变量是哪来的,如何发挥作用?查看汇编代码可以发现,整个系统的第2条指令就是栈初始化,而且直接赋值,这个栈顶指针是如何得出来的?链接后的文件中就有了么?
第二个问题,如果要重写这个启动文件,该如何去做?因为虽然text段、rodata是写到芯片里了,如何读出来全局变量的信息来初始化RAM? startup.c文件中是用一个结构体对象来获取的,我们要写这个启动文件,显然不需要它,因为我们的目标不是在codeworriar里调试,而是写到HC08里,让它跑起来就可以了
我要注册!!
__SEG_END_SSTACK 是CW Linker 专用的,不需要改,它定义栈的初始地址值。如需改栈的地址,改SP(HC08)便成(如用LDHX 地址; TXS)。栈的大小在PRM文件里STACKSIZE定义。最简单的startup.c是把栈的地址定义,其它的要看看程式的需要。例如用"for" loop和 "=" 定义变量的初始值。
返回列表