关于ucos问题

1)

我想问一下斑竹,4510在跑ucos时,除了ucos自己的*.c *.s文件以外,是不是要需要另外的bootloader??

也就是说,几乎所有的代码在arm上运行时,都需要有bios??
而不仅仅uclinux需要?

不一定都要有BOOTLOADER,需要写一个启动代码,和内核编译在一起就可以了:
编译时应该在放在第一个文件位置编译
启动代码需要完成如下工作:
设置 异常向量表,即在 0x0 – 0x1c 位置放置7条跳转指令(其中 0x14 为空)
分别实现每种异常的处理程序,其中包括 Reset_Handler、Undefined_Handler、SWI_Handler、Prefetch_Handler、Abort_Handler、IRQ_Handler、FIQ_Handler。
程序从 Reset_Handler 进入后,需要首先进行相关硬件的初始化操作,例如 初始化SDRAM、CPU speed、Interrupt Controller、UART、timer 等。
建立每种异常状态下的系统堆栈,为了简单起见可以只在 svc 态 和 irq 态下的建立堆栈:setup_svc_stack ,setup_irq_stack。
强制 ARM 处理器状态转换为 svc 管理态。
跳转到uC/OS-II 代码的 main 入口,实际上是编译链接后产生的 __main 入口。

(2)

编译器ADS设置的ro_base是0x0c000000,也就是把ucos所有代码(*.c;*.s)全部编译到以ro_base为起点的空间中了,但是在44b0x中0x0c000000是ram的起始位置,也就是说所有代码编译到ram空间了。刚开机时,pc肯定指向0x0的,所以,程序如何能跳转到ram中的ro_base(0x0c00000)中呢?

我觉得肯定有bootloader在起作用,将执行代码从flash中拷贝到ram中,再设置pc指针为0x0c000000。

0x0c0000中的指令是b ResetHandler应该就是ucos的启动指令了  

编译的这个文件,是要在ram中运行的,所以ro_base才要设置为ram的首地址0x0c000000,只有这样,编译出来的代码才是基于0x0c000000空间之上的。
再者bootloader肯定要起作用,一是拷贝img到ram,二是处理各种中断

(3)

现在想把嵌入式操作系统移植进去(例如 UCOS)怎么做?它又没有BIOS,如何把嵌入式操作系统和应用程序都写到存储器上,而且在运行操作系统后马上运行应用程序?莫非可以把操作系统后和应用程序在一起编译后在写入目标机?

(4)

不过我最想确认的还是44b0x跑ucos需要不需要bootloader?

还是直接可以用移植ucos时自带的那个44binit.s就足以?

我个人认为除了上面那个44binit.s之外,还有别的程序在起作用,因为整个ucos系统的文件,包括(*.c,*.s)都在编译连结的时候分配到0xc000000以后的区域。

如果没有别的程序,例如bootloader之类的,那么即使将最终生成的ucos.bin烧到flsah中,也是不能运行的,因为第一条指令是:

b ResetHandler

而ResetHandler是被连接到0xc000000(RAM区域)以后了,此时ram中什么东西也没有,一开始执行就会出错的。

(5)

 
发布了50 篇原创文章 · 获赞 10 · 访问量 30万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章