Перейти к содержанию
    

AT91RM9200 - разбиение кода на быструю и медленную части

Что я делаю неправильно?

 

sections // 1

DCD 0x21F00800 ; _SDRAM_READ_ Section 00000000; Flash

DCD 0x21F03FFF ; 00100000

DCD 0xC ; 2_1100 ; wb, buffered

// c03fc000

DCD 0x21F04000 ; c0000000 ; SDRAM Page 0 - _SDRAM_WRITE_ Section

DCD 0x21F04FFF ; c0400000

DCD 0xC ; 2_1100 ; wb, buffered

Здесь выброшен маркер конца таблицы (DCD 0x01), что у Вас в TT оказалось - неизвестно.

 

POP {LR}

POP {R7}

POP {R6}

POP {R5}

POP {R4}

POP {R3}

POP {R2}

POP {R1}

POP {R0}

Лучше грузить на стек и выгружать регистры скопом, а не по одному.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привет. На сколько я помню я делал отдельный сегмент кода в внутреней памяти, потом писал к функции приставку - разместить код туда.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Привет. На сколько я помню я делал отдельный сегмент кода в внутреней памяти, потом писал к функции приставку - разместить код туда.

Я уже тоже думаю сделать примерно также. Но вариант с кэшем надо проработать до логического завершенния.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здесь выброшен маркер конца таблицы (DCD 0x01), что у Вас в TT оказалось - неизвестно.

Другими словами, описания начала и конца сегментов, содержащих весь код программы и лежащих до маркера, недостаточно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Должно быть:

sections // 1

DCD 0x21F00000

DCD 0x21F10000

DCD 0xC ; 2_1100 ; wb, buffered

DCD 0x01

Размер секции должен быть кратен 1Мбайт. Имеет смысл кэшировать всю SDRAM, внутреннюю SRAM и флеш.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Должно быть:

 

Размер секции должен быть кратен 1Мбайт. Имеет смысл кэшировать всю SDRAM, внутреннюю SRAM и флеш.

 

Есть несколько но:

 

1. Если кешировать флэш, то из программы ничего в нее не запишешь без ухищрений.

2. Если используется DMA, то ее буфера проще организовать в некешируемой области.

 

Таким образом, надо подумать над тем, везде ли включать кеш.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. Если кешировать флэш, то из программы ничего в нее не запишешь без ухищрений.

Ну, это особый случай, а все "ухищрения" сводятся к отключению кэша на время записи.

 

2. Если используется DMA, то ее буфера проще организовать в некешируемой области.

...а если DMA работает только на вывод, то имеет смысл использовать write-through.

 

Таким образом, надо подумать над тем, везде ли включать кеш.

Да, думать нужно всегда :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...