1.用ADS编写一个工程后(代码中包含了一个main入口函数),并将RO设置为0x8000,这样子编译之后就可以下载到sdram中执行吗?
2.我认为要完成1的功能,至少要对sdram进行一些初始化,才能下载到sdram中执行,那这段初始化,是否可以通过AXD的脚本(比如setmem等命令)来实现,还是要把 init.S(这个文件主要是硬件的一些初始化,比如sdram,中断屏蔽等,以及设置各个模式的堆栈,并最后跳入__main入口)一起编译到这个工程中呢? 我是否可以通过AXD的脚本初始化硬件后,然后在ADS中编译自己的程序,然后下载到sdram中执行吗?
3.要执行c语言代码,之前必须要设置堆栈,拷贝RW代码,以及清0 ZI段后,才能跳入到main入口。这个工作在ADS中可以由ADS自己来完成(比如调用_main,_rt_entry,并且在init.S中跳入__main()函数),是否也可以自己写一段初始化,设置 堆栈的代码来实现呢?
4.在ADS中经常有一个分散装载(Scatlerloading)文件,如下: ROM_LOAD 0x02000000 { ROM +0 { init.o (Init, +First) anon$$obj.o __main.o(!!!) * (+RO) } RAM 0x0 { vectors.o(Vect, +First) flash.o * (+RW, +ZI) }
}
这个文件的具体含义是什么呢? 我是这样理解的:开始所有的代码都存在于0x02000000地址开始的flash空间中,运行时,系统会把vectors.o和flash.o,以及RW,ZI段拷贝到sdram的0x0的空间中, 我这样的理解有什么问题吗?
5.当用户使用分散装载功能的时候,必须重调用_user_initial_stackheap(),这是什么意思呢,为什么需要这么做,如何去做呢?
|