主程序:
while (1)
{
u32 fontcnt = 0;
u8 i = 0, j = 0;
u8 fontx[2];//gbk码
u8 key = 0,t = 0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
uart_init(115200); //串口初始化为115200
usmart_dev.init(72); //初始化USMART
LED_Init(); //初始化与LED连接的硬件接口
KEY_Init(); //初始化按键
LCD_Init(); //初始化LCD
W25QXX_Init(); //初始化W25Q128
my_mem_init(SRAMIN); //初始化内部内存池
//exfuns_init(); //为fatfs相关变量申请内存
f_mount(fs[0],"0:",1); //挂载SD卡
程序中加了这个初始化内存的池就出现了硬件中断错误,
static void App_Fault_ISR (void)
{
while (1) {
;
}
}
程序在这里死了,跑步出来。运用排除法之后发现在
void my_mem_init(u8 memx)
{
mymemset(mallco_dev.memmap[memx], 0,memtblsize[memx]*2);//内存状态表数据清零
//mymemset(mallco_dev.membase[memx], 0,memsize[memx]); //内存池所有数据清零
//mallco_dev.memrdy[memx]=1; //内存管理初始化OK
}
的这个函数中,程序在mymemset(mallco_dev.memmap[memx], 0,memtblsize[memx]*2);//内存状态表数据清零,这里出现了
问题,运行这句话,程序就出出现硬件中断错误。
各位大神,我先说一下背景,我是移植原子的程序到FreeRtos上去的,编译环境是Iar,所所以内存字节对齐的方式和keil下面不一样,我做了修改
,编译都是通过的
//内存池(32字节对齐)
#pragma pack(push,32) //指定字节对齐
__no_init u8 mem1base[MEM1_MAX_SIZE]; //内部SRAM内存池
__no_init u8 mem2base[MEM2_MAX_SIZE] @ 0x68000000; //外部SRAM内存池
#pragma pack(pop) //还原默认字节对齐
//内存管理表
u16 mem1mapbase[MEM1_ALLOC_TABLE_SIZE]; //内部SRAM内存池MAP
u16 mem2mapbase[MEM2_ALLOC_TABLE_SIZE] @(0X68000000+MEM2_MAX_SIZE); //外部SRAM内存池MAP
其他的地方都没动过,求大神指点,原子老师要是能看到还望指点
@正点原子
一周热门 更多>