初级会员
- 积分
- 134
- 金钱
- 134
- 注册时间
- 2016-11-29
- 在线时间
- 24 小时
|
本帖最后由 wendellzq 于 2017-12-29 15:40 编辑
在战舰V3-标准例程-HAL库版本1.0\实验37 内存管理实验的基础上移植EMWIN,植入官方Demo编译出错:..\OBJ\Template.axf: Error: L6406E: No space in execution regions with .ANY selector matching guidemo_treeview.o(.constdata).
..\OBJ\Template.axf: Error: L6406E: No space in execution regions with .ANY selector matching guidemo_treeview.o(.constdata).
..
..
..\OBJ\Template.axf: Error: L6406E: No space in execution regions with .ANY selector matching libshutdown.o(.ARM.Collect$$libshutdown$$00000000).
..\OBJ\Template.axf: Error: L6406E: No space in execution regions with .ANY selector matching guidemo_resource.o(.constdata).
..\OBJ\Template.axf: Error: L6406E: No space in execution regions with .ANY selector matching guidemo_resource.o(.constdata).
..\OBJ\Template.axf: Error: L6406E: No space in execution regions with .ANY selector matching usenofp.o(x$fpl$usenofp).
..\OBJ\Template.axf: Error: L6407E: Sections of aggregate size 0x4432c bytes could not fit into .ANY selector(s).
Not enough information to list image symbols.
Not enough information to list the image map.
Finished: 2 information, 0 warning and 2754 error messages.
"..\OBJ\Template.axf" - 2754 Error(s), 0 Warning(s).
GUIConf.c代码如下:
#include "GUI.h"
#include "sram.h"
#include "malloc.h"
#define USE_EXRAM 1//使用外部RAM
//设置EMWIN内存大小
#define GUI_NUMBYTES (500*1024)
#define GUI_BLOCKSIZE 0X80 //块大小
//GUI_X_Config
//初始化的时候调用,用来设置emwin所使用的内存
void GUI_X_Config(void) {
if(USE_EXRAM) //使用外部RAM
{
U32 *aMemory = mymalloc(SRAMEX,GUI_NUMBYTES); //从外部SRAM中分配GUI_NUMBYTES字节的内存
GUI_ALLOC_AssignMemory((void*)aMemory, GUI_NUMBYTES); //为存储管理系统分配一个存储块
GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE); //设置存储快的平均尺寸,该区越大,可用的存储快数量越少
GUI_SetDefaultFont(GUI_FONT_6X8); //设置默认字体
}else //使用内部RAM
{
U32 *aMemory = mymalloc(SRAMIN,GUI_NUMBYTES); //从内部RAM中分配GUI_NUMBYTES字节的内存
GUI_ALLOC_AssignMemory((U32 *)aMemory, GUI_NUMBYTES); //为存储管理系统分配一个存储块
GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE); //设置存储快的平均尺寸,该区越大,可用的存储快数量越少
GUI_SetDefaultFont(GUI_FONT_6X8); //设置默认字体
}
}
malloc.h代码如下:
#ifndef __MALLOC_H
#define __MALLOC_H
#include "sys.h"
#ifndef NULL
#define NULL 0
#endif
//定义两个内存池
#define SRAMIN 0 //内部内存池
#define SRAMEX 1 //外部内存池
#define SRAMBANK 2 //定义支持的SRAM块数.
//mem1内存参数设定.mem1完全处于内部SRAM里面.
#define MEM1_BLOCK_SIZE 32 //内存块大小为32字节
#define MEM1_MAX_SIZE 40*1024 //最大管理内存,默认40K
#define MEM1_ALLOC_TABLE_SIZE MEM1_MAX_SIZE/MEM1_BLOCK_SIZE //内存表大小
//mem2内存参数设定.mem2的内存池处于外部SRAM里面
#define MEM2_BLOCK_SIZE 32 //内存块大小为32字节
#define MEM2_MAX_SIZE 960 *1024 //最大管理内存960K
#define MEM2_ALLOC_TABLE_SIZE MEM2_MAX_SIZE/MEM2_BLOCK_SIZE //内存表大小
//内存管理控制器
struct _m_mallco_dev
{
void (*init)(u8); //初始化
u8 (*perused)(u8); //内存使用率
u8 *membase[SRAMBANK]; //内存池 管理SRAMBANK个区域的内存
u16 *memmap[SRAMBANK]; //内存管理状态表
u8 memrdy[SRAMBANK]; //内存管理是否就绪
};
extern struct _m_mallco_dev mallco_dev; //在mallco.c里面定义
void mymemset(void *s,u8 c,u32 count); //设置内存
void mymemcpy(void *des,void *src,u32 n);//复制内存
void my_mem_init(u8 memx); //内存管理初始化函数(外/内部调用)
u32 my_mem_malloc(u8 memx,u32 size); //内存分配(内部调用)
u8 my_mem_free(u8 memx,u32 offset); //内存释放(内部调用)
u8 my_mem_perused(u8 memx); //获得内存使用率(外/内部调用)
////////////////////////////////////////////////////////////////////////////////
//用户调用函数
void myfree(u8 memx,void *ptr); //内存释放(外部调用)
void *mymalloc(u8 memx,u32 size); //内存分配(外部调用)
void *myrealloc(u8 memx,void *ptr,u32 size);//重新分配内存(外部调用)
#endif
main.c代码如下:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "ILI93XX.h"
#include "sram.h"
#include "malloc.h"
#include "string.h"
#include "GUI.h"
#include "GUIDemo.h"
#include "timer.h"
#include "touch.h"
int main(void)
{
HAL_Init(); //初始化HAL库
Stm32_Clock_Init(RCC_PLL_MUL9); //设置时钟,72M
delay_init(72); //初始化延时函数
uart_init(115200); //初始化串口
LED_Init(); //初始化LED
KEY_Init(); //初始化按键
TFTLCD_Init(); //初始化LCD FSMC接口
SRAM_Init(); //初始化外部SRAM
TIM3_Init(999,71); //1KHZ 定时器3设置为1ms
TIM6_Init(999,719); //触摸屏扫描速度,100HZ,10ms中断
my_mem_init(SRAMIN); //初始化内部内存池
my_mem_init(SRAMEX); //初始化外部内存池
TP_Init(); //触摸屏初始化
__HAL_RCC_CRC_CLK_ENABLE(); //使能CRC时钟,否则STemWin不能使用
WM_SetCreateFlags(WM_CF_MEMDEV); //使用存储设备
GUI_Init(); //EMWIN初始化
GUIDEMO_Main();
while(1);
}
实在无解了,请高手们帮帮忙!!!!!
|
-
|