Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Использование памяти программ


Автор: Denver 17.5.2006, 09:46
Требуется читать/записывать данные в память программ.
Нашел литературу про соответствующие команды LPM и SPM, но не получается их использовать, т.к. необходимо написать программу-загрузчик. Как описывается загрузчик и где он должен находиться?
Может кто подскажет? Могу выложить пример из книги. 

Автор: Romikgy 17.5.2006, 12:00
Цитата(Denver @  17.5.2006,  08:46 Найти цитируемый пост)
т.к. необходимо написать программу-загрузчик

зачем? 

Автор: Denver 17.5.2006, 13:45
короче, вот так не получается 
                 ldi     zh,$FF
                  ldi     zl,$00
        ldi r16,7
        mov r0,r16
        clr r1
        ldi r16,3
        sts SPMCR,r16
        spm
        
        ldi r16,1
        sts SPMCR,r16
        spm

затем читаю от туда же
        ldi     zh,$FF
        ldi     zl,$00
        lpm
        sts     SN+1,r0
        adiw    zl,1
        lpm
        sts     SN,r0
и в SN:SN+1 записывается 65535(FF), а должно быть 00007
В чем ошибка? Хотя так написанно в книге
Может еще что то надо? 

Автор: ShadeSt 19.5.2006, 08:13
Если я правильно ошибаюсь, загрузчик должен находится в области выделенной под него.
Область эта выбирается конфигурацией контроллера, и может быть либо "вверху", либо "внизу" памяти, размер соответственно тоже выбирается, а так же конфигурируется адрес с которого начнется исполнение программы либо 0h либо начало блока загрузчика, если он находится "внизу".

По идее писать память программ можно, только из области загрузчика, хотя тут я могу ошибаться. Почитай DataSheet, там должен быть отдельный раздел про это. И посмотри на 
boot.h /avr_boot Bootloader Support Utilities/, если есть WinAvr. 

Автор: Denver 22.5.2006, 07:51
А по конкретней можно! Как и где, если можно с примером.
Неужели никто не писал в память программ? Ну очень нужно.
 smile  

Автор: PILOT 22.5.2006, 20:17
Посмотри тут 

Автор: PILOT 22.5.2006, 20:18
и тут 

Автор: ShadeSt 22.5.2006, 21:59
Цитата

The Flash memory is organized in two main sections, the Application section and the
Boot Loader section ... The size of the different sections is configured by
the BOOTSZ Fuses...

Цитата

The Application section is the section of the Flash that is used for storing the application
code...The Application section can never store any Boot Loader code since the SPM instruction is disabled when executed from the Application section

Цитата

While the Application section is used for storing the application code, the The Boot
Loader software must be located in the BLS since the SPM instruction can initiate a programming
when executing from the BLS only. The SPM instruction can access the
entire Flash, including the BLS itself.

Цитаты выше взяты из мануала к ATmega8535. Почитай сначала мануал, что бы понять как это все работает.. хотя уже приблизительно должно быть понятно направление в котором надо копать.

SPM инструкции не будут работать если их выполнять из памяти программ. Сконфигурируй контроллер так, что бы твой код, который должен писать в память, был в области загрузчика, тогда все будет нормально.  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)