Размещаю вот эти переменные во внутреннем ОЗУ (32К):
unsigned char tx_buffer[6400];
unsigned char rx_buffer[32];
__align(16384) unsigned int tlb[4096];
unsigned char uart_incoming[16];
unsigned char packet[32];
unsigned char tx_fifo[16];
unsigned char rx_fifo[16];
Компилятор укладывает в младшие 16К переменные, описанные до "tlb", затем под "tlb" выделяет всо старшую половину ОЗУ (16К), а для оставшихся данных места уже "не остается", и компилятор возвращает ошибку ("не хватает памяти") :)
Опишем переменные в другом порядке:
unsigned char tx_buffer[TX_BUFFER_SIZE];
unsigned char rx_buffer[RX_BUFFER_SIZE];
unsigned char uart_incoming[16];
unsigned char packet[32];
unsigned char tx_fifo[16];
unsigned char rx_fifo[16];
__align(16384) unsigned int tlb[4096];
Проблема решена. Компилятор укладывает в младшие 16К все переменные до "tlb", а под "tlb" выделяет всо старшую половину ОЗУ (16К).
Вот так :)