打印
[开发工具]

STM 32 UCOS 外部RAM 硬件中断

[复制链接]
4191|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xiyouwang|  楼主 | 2009-8-11 11:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我正在做ucos移植到  stm32 上 请教个问题  

在移植ucos 操作系统时  可以用外部RAM 做数据区
内部ram做堆栈吗        我这样用的时候  大部分情况就进入了硬件中断      有几次可以运行
我只用内部ram的时候  就没有任何问题   
环境为  mdk



有个高手告诉我:
很多人都反映过这个问题   估计是MDK的问题    建议我换个ram大的   可我的已经最大了   64K     怎么办??

启动文件中配置:
; If you need to use external SRAM mounted on STM3210E-EVAL board as data memory,
; change the following define value to '1' (or choose ENABLE in Configuration Wizard window)
;//   <o>  External SRAM Configuration  <0=> DISABLE <1=> ENABLE
DATA_IN_ExtSRAM  EQU   1

; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs
;// <h> Stack Configuration
;//   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
;// </h>
Stack_Size       EQU     0x00000400
                 AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem        SPACE   Stack_Size
;__initial_sp
; If you need to use external SRAM mounted on STM3210E-EVAL board as data memory
; and internal SRAM for Stack, uncomment the following line and comment the line above
__initial_sp    EQU     0x20000000 + Stack_Size ; "Use MicroLIB" must be checked in
沙发
Neoo| | 2009-8-11 12:58 | 只看该作者
本帖最后由 Neoo 于 2009-8-11 13:04 编辑

研究一下,全部都放在外部ram里面可以运行么?

使用特权

评论回复
板凳
soft_wind| | 2009-8-11 13:54 | 只看该作者
本帖最后由 soft_wind 于 2009-8-11 14:01 编辑

我是这样做的。
1.启动代码中使能外部RAM。作FSMC和SRAM的初始化。
2.在IDE选项Linker页中取消"Use Memory Layout From Target Dialog"选项。
3.选择分散加载,选择Scatter File。我使用的Scatter File文件如下:
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x08000000 0x00080000  {    ; load region size_region
  ER_IROM1 0x08000000 0x00080000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_RAM1 0x68000000 0x00100000  {  ; RW data
   .ANY (+RW +ZI)
  }
  RW_IRAM1 0x20000000 0x00010000  {
   stm32f10x_vector.o (STACK)
   stm32f10x_vector.o (HEAP)
  }
}

其中0x68000000(SRAM起始地址) 0x00100000(SRAM容量)根据你的板子作相应的修改。
这样,你程序里定义的所有数据包括所有任务的堆栈都在外部SRAM中;而UC/OS内核的堆栈在内部RAM中。
系统内核堆栈的大小可以在启动文件中修改。就是LZ帖子里的文件。

不过我没有使用MicroLib,启动文件相关部分的代码:
DATA_IN_ExtSRAM  EQU     1


; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs
;// <h> Stack Configuration
;//   <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
;// </h>
Stack_Size       EQU     0x00000400

                 AREA    STACK, NOINIT, READWRITE, ALIGN = 3
Stack_Mem        SPACE   Stack_Size

__initial_sp
; If you need to use external SRAM mounted on STM3210E-EVAL board as data memory
; and internal SRAM for Stack, uncomment the following line and comment the line above
;__initial_sp    EQU 0x20000000 + Stack_Size ; "Use MicroLIB" must be checked in
                                            ; the Project->Options->Target window

; Amount of memory (in bytes) allocated for Heap
; Tailor this value to your application needs
;// <h> Heap Configuration
;//   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
;// </h>

Heap_Size        EQU     0x00000400
就是STM32官方例子的版本。

使用特权

评论回复
地板
soft_wind| | 2009-8-11 14:03 | 只看该作者
不使用Microlib主要是不知道这种情况下怎么些写分散加载文件。

使用特权

评论回复
5
zddpy| | 2010-12-3 20:26 | 只看该作者
楼主的问题解决了吗,我也碰到了同样的问题,不知道如何解决。

使用特权

评论回复
6
zddpy| | 2010-12-3 21:30 | 只看该作者
其他论坛上有说是启动文件的FSMC、SRAM初始化代码有问题,但看了半天也没有看出什么问题。

使用特权

评论回复
7
zddpy| | 2010-12-4 10:29 | 只看该作者
这里有ST的工程师吗,能不能告诉一下STM32 UCOS有没有使用外部RAM成功的,不然好早点换CPU了,已经在这上面浪费了很长时间了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝