реклама на сайте
подробности

 
 
> Atmega1280 + внешняя SRAM (WinAVR 20070525), подключение внешнего ОЗУ
kurtis
сообщение May 13 2008, 16:43
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Возникло непреодолимое желание увеличить количество ОЗУ, с этой целью было подключено внешняя SRAM размером 64к.

Теперь пытаюсь обьяснить компилятору что у меня подключено внешнее ОЗУ:
1) Пишу в make-файле
Код
EXTMEMOPTS = -Wl,-Tdata=0x802200,--defsym=__heap_end=0x80ffff

адрес 0x802200 т.к. у нас atmega1280, а там 8к байт ОЗУ.

2) Далее читаю FAQ по avr-libc, одновременно передирая код ОТ СЮДА (ссылка)

Код
#include <avr/io.h>
/*
* place a function in the '.init1' section to enable external RAM so
* that the C runtime startup can initialize it during C startup.  
*/
void enable_external_ram (void) __attribute__ ((naked)) __attribute__ ((section (".init1")));

void enable_external_ram(void)
{
  /*
   * enable external memory, no wait states
   */
  MCUCR |= _BV(SRE);
}


После этих манипуляций, в теле программы я пишу следующий код
Код
int massiv[100][100];

void TTechnolog::Exec()
{
........
/*  Заполняем ОЗУ какими-то данными  */
    for(i=0;i<100;i++)
        for(j=0;j<100;j++)
            if(i%2)
                massiv[i][j]=0x55;
            else
                massiv[i][j]=0x11;
........

таким образом я добиваюсь того что у меня
Цитата
Size after:
main.elf :
section size addr
.data 192 8389120
.text 32744 0
.bss 24400 8389312
.stab 66576 0
.stabstr 26615 0
Total 150527
Т.е. получаем полностью заполненное внутренее ОЗУ, и немного заполненное внешнее (насколько я понимаю сам процесс). До всех манипуляций секция .bss была равна 4400 и мы получили ожидаемое приращение в размере в 20к байт!
Следовательно, ожидаю увидеть работающий процессор, но вместо этого он "висит"... Вероятность ошибки в других участках кода низка, т.к. когда я привожу файлы в исходное состояние, то плата полностью работает и весело моргает светодиодами!

В идеале хочется просто расширить адресное пространство ОЗУ без учета потери производительности из-за увеличения времени доступа к внешней памяти!

Для компиляции используется avr-c++, WinAVR 20070525.

Что я неправильно делаю???
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 16:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01365 секунд с 7
ELECTRONIX ©2004-2016