Сейчас, если записать несколько значений ( 45, 67, 89, AB ) последовательно по адресам 0000, 0001, 0002, 0003, при чтении всё нормально:
0x0000: 45
0x0001: 67
0x0002: 89
0x0003: AB
Но если после записи по адресу 0003 сделать запись другого значения, например, 0x34, то портится содержимое по адресу 0002:
0x0000: 45
0x0001: 34
0x0002: 00
0x0003: AB
Можно ли делать побайтную (8 бит) запись и чтение? Если функцию побайтного чтения можно организовать, анализируя нулевой бит адреса и используя сдвиг, то для функции записи я, пока что, вижу только вариант "чтение-модификация-запись". Можно использовать, конечно, но при этом будут совершаться лишние действия и при записи будет падать производительность.
Проблема решена - нужно было использовать 8-битный указатель. Возможно, информация кому-нибудь пригодится.
Функции чтения и записи байтов:
Код: Выделить всё
#define EXT_SRAM_BASE_ADDRESS 0x68000000
void ext_sram_write_byte(uint32_t address, uint8_t data)
{
*(uint8_t *) (EXT_SRAM_BASE_ADDRESS + (address) ) = data;
}
uint8_t ext_sram_read_byte(uint32_t address)
{
return *(uint8_t *)(EXT_SRAM_BASE_ADDRESS + address);
}