作者entaroadun (entaroadun)
看板ASM
标题[问题]单晶片Keil C如何使用指标读取flash memory
时间Fri Feb 9 19:06:48 2007
因为ptt目前没有单晶片讨论区,所以选择性质比较接近的本板发问
这是小弟最近用指标判读传入引数阵列时,遇到的问题
原本的设计是将UART通讯的各种指令封包,以阵列方式存入flash memory里面
呼叫通讯副程式时,利用指标判别传送的通讯阵列是那个,然後决定回传值
意外在过程中,发现到一些问题
从Keil C反组译的ASM里面,Command_ReadKWH阵列被分配到0x0c47的位置
我把阵列位置读取来显示,结果数字是16714823,也就是0xff0c47
多了前面一个ff的byte
unisigned char code Command_ReadKWH[]={0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00}
void test(unsigned char *Array)
{
unsigned int i;
unsigned char *k;
// if(Array==Command_ReadKWH)
// DisplayWord(finish);
// if(Array==Command_RelayON)
// DisplayWord(failed);
// i=&Command_RelayON;
// j=Command_ReadKWH;
Display(Command_ReadKWH,0,0,0,0,0,0,5);
while(1)
SoftDog=0;
}
後来直接宣告指标k,将k值设为0xff0c47,结果*k读到是RAM的47H的位置
而且直接将k的内容显示,只有抓到0x0c47,最前面的一个byte遗失
试过将k强制宣告为long,结果虽然没有再抓到RAM 47H,但是抓到的值却不是0x03
(Command_ReadKWH起始位置之後的第二个byte即0x03)
void test(unsigned char *Array)
{
unsigned int i;
unsigned char *k;
k=0xff0c47;
k++;
Display(*k,0,0,0,0,0,0,5);
while(1)
SoftDog=0;
}
之後尝试了各种方法,只有下列可以正常读取到flash memory中的Command_ReadKWH[1]
void test(unsigned char *Array)
{
unsigned int i;
unsigned char *k;
k=Command_ReadKWH;
k++;
Display(*k,0,0,0,0,0,0,5);
while(1)
SoftDog=0;
}
现在的问题是,要怎麽样才能直接指定一个位址,读取flash memory中的值
例如 指令0x0000就可以将flash memory中的0000H的内容读出
也就是能够区隔指标所指的位址究竟是定址於flash memory或是RAM
不知道有没有对单晶片和Keil C熟悉的人可以指点迷津
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.142.58.67
1F:推 ruemann:请参考下面那篇 02/10 00:04