搜索
bottom↓
回复: 9

uc/os为什么不可以在任意地址运行?【恢复】

[复制链接]

出0入0汤圆

发表于 2009-1-5 16:56:00 | 显示全部楼层 |阅读模式
我现在在做BOOT 发现ucos在连接参数为



LR_IROM1 0x00000000 0x00080000  {    ; load region size_region

  ER_IROM1 0x00000000 0x00080000  {  ; load address = execution address

   *.o (RESET, +First)

   *(InRoot$$Sections)

   .ANY (+RO)

  }

  RW_IRAM1 0x40000000 0x00008000  {  ; RW data

   .ANY (+RW +ZI)

  }

}



编译下载,此时下载开始地址为0x00000000

可以正常工作,



现在修改连接参数,代码程序不变

LR_IROM1 0x00030000 0x00080000  {    ; load region size_region

  ER_IROM1 0x00030000 0x00080000  {  ; load address = execution address

   *.o (RESET, +First)

   *(InRoot$$Sections)

   .ANY (+RO)

  }

  RW_IRAM1 0x40000000 0x00008000  {  ; RW data

   .ANY (+RW +ZI)

  }

}

编译下载,此时下载开始地址为0x00030000



就不工作了.请高手指点一下!!!!!!!!!!



谢谢!



我用的平台是MCB2300  开发工具是KEILV3.6  



我的主要目的是让US/OS运行在任意的FLASH地址,这其中除了修改连接参数文件还需要做哪方面的工作???





本贴被 gcc312628 编辑过,最后修改时间:2009-01-06,08:43:09.

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2009-1-22 08:49:52 | 显示全部楼层
需要修改什么参数么?

出0入0汤圆

发表于 2009-1-15 01:24:34 | 显示全部楼层
ucos 可以在任意address上run

出0入0汤圆

发表于 2009-1-12 09:09:57 | 显示全部楼层
        C库                    用户代码



__main       <-----2-------    复位处理程序<---1----映像入口点

   |                              .初始化各种模式的堆栈指针

   |                              .配置MMU或者其他的相关的外设(基本是和存储器等访问相关的)

   3                              .Cache等

   |

   |

_scatterload

    .复制代码和数据

   |

   |

   4

   |

__rt_entry                        __user_initial_stackheap

    .初始化库函数     ----5---->      .建立应用程序的堆和栈



    .调用顶级构造函数(C++)--6-->  $Sub$$main            ---+

   -------------------                .启用缓存和中断      |

                                                           7

    .退出       <--------8------  main  <------------------+

出0入0汤圆

 楼主| 发表于 2009-1-11 16:25:50 | 显示全部楼层
首先谢谢 usecool的回复.

我在Main()

{

 直接跳到0x30000 



}

同你

LDR PC init_entry 

... 

... 



init_entry DCD  0x30000 

效果应该一样? 

这种方法我在没有操作系统的前后台系统用来操作SD卡,可以!

就是加上系统就不行了?

在有操作系统的前提下怎么做才可以呢?

出0入0汤圆

发表于 2009-1-10 21:42:10 | 显示全部楼层
cpu启动时候必须从0x0取得启动的跳转地址,那么就是一定要在对应的地址有合适的代码的。



另外一个是,某些的cpu没有内部flash,或者是flash地址不是从0x0开始的,比如lpc2290的,外部就是从0x80000000开始的,cpu会自动设置pc到对应的地址的。



ER_IROM1 0x00030000 0x00080000 这样的设置就是把应该在0x0的代码修改到0x30000了,那么cpu从0x0得不到合适的代码,当然就不能正常运行了。



如果坚持这样,那么只要让0x0的代码是跳转到0x30000就可以了(很小的一个bootloader)。



LDR PC init_entry

...

...



init_entry DCD  0x30000

出0入0汤圆

 楼主| 发表于 2009-1-9 15:08:57 | 显示全部楼层
看来不用BOOTLOAD是实现不了了

出0入0汤圆

发表于 2009-1-5 17:09:53 | 显示全部楼层
问这个问题的时候,不晓得你有没有想过看贴的人能否看懂你的问题?因为:

没有具体环境,没有部工作的特征描述/分析,别人怎么回复你?

试想一下你是看贴的人,你能看懂问题么?有足够信息量来解决问题么?

出0入0汤圆

发表于 2009-3-27 17:33:48 | 显示全部楼层
顶起来,现在遇到和楼主一样的问题
还在郁闷中!!

出0入0汤圆

发表于 2009-3-27 17:40:25 | 显示全部楼层
不需要修改什么参数。当然前提是程序里没有指定什么必须的参数。
如果移植程序里指定了什么地址,那就不是ucOS本身能处理的了。

话说,你给的信息太少了。导致不能正确运行的原因很多……谁知道你撞上哪个了呢。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 19:13

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表