呵呵,匠人果然与众不同,一出手就是一堆**弹。
先捡俺知道的问题尝试回答一下:
关于问题1:
首先,不知道匠人对程序区和数据区怎么划分的,在STM32中并没有对Flash做这样的区分。
关于你碰到的问题是因为,STM3 ...
香水城 发表于 2012-2-24 10:24
关于问题1:答复香斑:
我说的数据区就是const数组,代码区就是指函数。
如果说是因为写保护,那我可以理解。不过如此一来,问题1就转变成了:同样是存放在FLASH中,为什么const数组可以被改写?
为了说明问题,我把相关的程序挑有用的放上来,请注意红色字体。
//--------------------------------------------------------
//数据表
//--------------------------------------------------------
const u32 R_tab[]=
{
0x12345678, //0
//更多数据省略……
}
//--------------------------------------------------------
//函数
//--------------------------------------------------------
u32 CNT_v1(u32 data)
{
//代码省略……
}
改写数据区:
FLASH_Unlock(); //解锁FLASH编程擦除控制器
Address=(vu32)&(R_tab); //获取表格地址
FLASH_ProgramWord ((Address), 0); //写32位数据(调用《stm32f10x_flash.c》的函数)(这一步能够成功)
FLASH_Lock(); //锁定FLASH编程擦除控制器
改写代码区:
FLASH_Unlock(); //解锁FLASH编程擦除控制器
Address=(vu32)&(CNT_v1); //获取某个函数函数地址
FLASH_ProgramWord ((Address), 0); //写32位数据(调用《stm32f10x_flash.c》的函数)(这一步失败)
FLASH_Lock(); //锁定FLASH编程擦除控制器 |