Я пытаюсь эмулировать систему, которая должна копировать данные в периферийные устройства, без металлических элементов, без ОС.Сохраните адрес как значение и используйте его позже в указателе
В соглашении говорится, что функция копирования является 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 *' с '(void *) ptr', то для типа' void * 'для' memcpy' указывается, что он принимает любой тип указателя. –
Код не компилируется. Является ли address_reg идентичным адресу? – Ctx