[問題]單晶片Keil C如何使用指標讀取flash memory

看板ASM (組合語言)作者 (entaroadun)時間18年前 (2007/02/09 19:06), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串1/1
因為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
文章代碼(AID): #15p5N96y (ASM)
文章代碼(AID): #15p5N96y (ASM)