
Сообщение от
predatoralpha
Обычно под С это прямо не требуется, там идёт работа с переменными и указателями.
Но если очень надо:
*(char*)0xAAAA =0x55; // Записываем 55h по адресу ААААh
насчёт того как скомпилить - не скажу, кури документацию.
чёйто не требуется? Под контроллеры пишешь - постоянно так делаешь. Особливо под те, что порты и память не различают - ARM. Да и для AVR тоже можно.
Только там обычно делают грамотно.
Определяют макрос типа:
#define MEMORY_REGISTER (*(unsigned char*)0xABCD)
А потом можно записать в эту ячейку:
MEMORY_REGISTER = 5;
Или считать значение ячейки:
unsigned char d = MEMORY_REGISTER;
Например (для спека) очистка экрана:
Код:
#define SCREEN ((unsigned char*)0x4000)
#define SCREENL 6912
void cls(){
unsigned char* begin_scr = SCREEN;
unsigned int i;
for(i=0; i<SCREENL; i++){
*(begin_scr++) = 0;
}
}
Это учёбный пример, быстрее и короче очистить экран так:
Код:
#include <string.h>
memset((void*)0x4000, 0, 6192);

Сообщение от
ALKO
этот самый printf - работает как ассемблерный call(процедура печати символа в ПЗУ) ?[COLOR="Silver"]
Не обязательно. printf выводит символы при помощи функции putchar. Напиши свой putchar и будет вывод куда угодно и как угодно