我試圖模擬需要將數據複製到外設,裸機,無OS的系統。將地址存儲爲值並稍後將其用於指針
該約定規定複製函數是一個C函數,它將外設的地址作爲寫入某個寄存器的8位地址。外設在內部使用。不過,我在模擬C中的事情,並測試所有功能我在做類似如下的MWE:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char *argv[]){
//stack-array to copy
char array[4] = {3,32,-12,99};
//naive emulation of the peripheral memory space
char peripheral_array[4];
//herein lies the address send as a value
char address_reg = (char*)(peripheral_array);
//assume this is the peripheral side
//set ptr to the address of the peripheral_array
char *ptr = (char*) address_reg;
memcpy((void*)ptr,array,sizeof(char)*4);
return EXIT_SUCCESS;
}
我得到segmentation fault
。
這裏有什麼問題?
如何將數組的指針作爲值存儲併發送,將其作爲地址重新寫入數組並執行
memcpy
?
更換
我想,如果它是代表外圍地址空間'char'更改爲'無符號char'。 –
另外:你不需要用'(void *)ptr'強制轉換爲'void *','memcpy'的'void *'類型的意思是它接受任何指針類型。 –
代碼不會編譯。 address_reg與地址相同嗎? – Ctx