[問題]單晶片Keil C如何使用指標讀取flash memory
因為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
推
02/10 00:04, , 1F
02/10 00:04, 1F
ASM 近期熱門文章
PTT數位生活區 即時熱門文章