Программирование ARM CM3 в ПЗУ и ОЗУ

В настоящее время я делаю шаг, чтобы обновить свои проекты в свободное время до использования ARM вместо 8-битных микрочипов от Microchip.

Но, к сожалению, я столкнулся с некоторыми проблемами:

Я не очень понимаю различия в способах программирования: - программирование в ПЗУ - программирование в ОЗУ (которое в моем случае всего 32К)

Я уже провел несколько тестов «hello world» с IAR IDE, где компиляция/программирование выполнялись с заданной конфигурацией, о которой я не беспокоился. Но мне не нравилась IAR IDE и ограничение компилятора IAR в 32 КБ, поэтому я решил настроить новую среду (см. конфигурацию ниже).

После настройки среды Eclipse, используя примеры, предоставленные IAR, мне удалось запрограммировать ARM в ОЗУ. Но когда я хотел запрограммировать ARM на ПЗУ, программа, похоже, ничего не делала. Я использовал примеры make-файлов, которые, как я полагаю, каким-то образом отображались в ПЗУ или ОЗУ, мне приходилось каждый раз определять только один из них.

Я знаю, что ПЗУ является постоянной памятью и не будет пустым после отключения питания, а ОЗУ работает быстрее, но требует загрузки программы в ARM каждый раз.

Нужно ли мне разделить мою программу на части ПЗУ и ОЗУ, или я могу запрограммировать все в ПЗУ таким образом, чтобы ARM переназначал код в ОЗУ при включении?

В настоящее время я использую следующую конфигурацию:

  • Источник кода GCC
  • Затмение С/С++
  • Программист Segger Jlink (сервер GDB)
  • Библиотека CMSIS или LPCOpen (еще не полностью работает)
  • NXP LPC1766 Cortex M3
  • Windows 8 64-разрядная
  • Примеры IAR для LPC1768 и CMSIS
  • примеры из NXP: lpc17xx.cmsis.driver.library

Может кто-нибудь, пожалуйста, помогите мне понять различные способы использования ПЗУ и ОЗУ и как мне настроить мой компилятор/создать файлы для использования памяти ПЗУ и ОЗУ.

В конце концов, я хочу иметь возможность запрограммировать ARM (я думаю) в ПЗУ таким образом, чтобы я мог выключать ARM без необходимости каждый раз перепрограммировать его.


person Futience    schedule 06.04.2014    source источник


Ответы (1)


Я думаю, вам нужно взглянуть на файлы карты компоновщика, предоставленные с примерами. Эти файлы будут иметь расширение .ld, и часто вы будете видеть буквы RAM, ROM или Flash в имени файла. Файл компоновщика — это просто текстовый файл, поэтому вы можете просмотреть его в редакторе Eclipse. Важно то, что раздел .text находится в ПЗУ.

Средство запуска для GDB также будет иметь связанный с ним сценарий запуска. Вы можете отредактировать это, выбрав Configure... в том же пункте меню Eclipse, который запускает GDB. Сценарий должен заканчиваться строками типа

monitor flash device = LPC1343
monitor flash download = 1

Команда monitor в GDB отправляет оставшуюся часть строки на сервер GDB. Команды flash описаны в руководстве по серверу JLink GDB.

РЕДАКТИРОВАТЬ: раздел .text является разделом по умолчанию, используемым компоновщиком для исполняемого кода. В моем файле gcc_arm.ld у меня есть это:

SECTIONS
{
    .text :
    {
        KEEP(*(.isr_vector))
        *(.text*)

    } > FLASH

Я помещаю векторы сброса и прерывания в отдельный раздел и заставляю компоновщик помещать их в самое начало исполняемого кода.

person Community    schedule 06.04.2014
comment
Я просмотрел разные файлы .ld, в которых было ПЗУ или ОЗУ, как вы и ожидали. Я вижу, что в этих файлах настраиваются начальное и конечное расположение ПЗУ/ОЗУ в карте памяти ARM. У меня также была настроена конфигурация отладки с помощью следующих команд GDB: mon speed 4000 mon endian little mon flash download = 1 mon flash device = LPC1766 mon reset 1 Только часть .text, которую я не могу найти в своих .LD файлах? Какова функция этого .text? Большое спасибо! - person Futience; 08.04.2014
comment
Я начинаю понимать сопоставление разных мест в ПЗУ и ОЗУ. .text содержит весь код и всегда будет помещаться в ПЗУ, если я прав. Переменные, используемые кодом, будут начинаться в начале оперативной памяти или в указанных местах, когда они настроены в файлах компоновщика. Я не до конца понимаю синтаксис, используемый в файлах компоновщика, но думаю, что со временем разберусь. - person Futience; 08.04.2014