[开发工具] STM 32 UCOS 外部RAM 硬件中断

[复制链接]
5455|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主要是不知道这种情况下怎么些写分散加载文件。
zddpy 发表于 2010-12-3 20:26 | 显示全部楼层
楼主的问题解决了吗,我也碰到了同样的问题,不知道如何解决。
zddpy 发表于 2010-12-3 21:30 | 显示全部楼层
其他论坛上有说是启动文件的FSMC、SRAM初始化代码有问题,但看了半天也没有看出什么问题。
zddpy 发表于 2010-12-4 10:29 | 显示全部楼层
这里有ST的工程师吗,能不能告诉一下STM32 UCOS有没有使用外部RAM成功的,不然好早点换CPU了,已经在这上面浪费了很长时间了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部