Буферы данных Hitech C в памяти программ
Компилятор C18 допускает переменные в памяти программ с определителем ROM, но Hi-Tech C, похоже, неохотно использует архитектуру Havard в своих лучших проявлениях. Итак, есть ли способ создания буферов данных в памяти программ с помощью компилятора Hi-Tech C (я готов поставить под угрозу скорость доступа).
Я видел признаки возможности с psect, но у меня нет работающей реализации.
1 ответ
Компилятор HI-TECH PICC18 размещает объекты, объявленные как const
в пространство программы по умолчанию. Нет специальных классификаторов, таких как C18 RAM
/ROM
необходимы:
3.5.3 Объекты в программном пространстве
const
объекты обычно размещаются в программном пространстве. На устройствах PIC18 программное пространство занимает весь байт, компилятор хранит один символ на место байта, а значения считываются с помощью инструкций чтения таблицы. Всеconst
качественные объекты данных и строковые литералы помещаются вconst
psect.const
psect размещается по адресу выше верхнего предела ОЗУ, так как ОЗУ иconst
указатели используют этот адрес, чтобы определить, требуется ли доступ к ПЗУ или ОЗУ.
Обратите внимание, что размещение часто обновляемых данных во флэш-память микроконтроллера может быть не очень хорошей идеей, поскольку флэш-память имеет ограниченное количество циклов программирования / стирания.
far
указатели могут быть использованы для разыменования памяти программы:
3.4.12.2. Константные и дальние указатели
const
а такжеfar
указатели могут иметь ширину 16 или 24 бита. Их размер можно переключать с--CP=24
или же--CP=16
опция командной строки. Код, используемый для разыменования их, также изменяется в зависимости от их размера. Одинаковый размер указателя должен использоваться для всех модулей в проекте. Указатель наfar
идентичен указателю наconst
за исключением того, что указатели наfar
может быть использован для записи по адресу, который они держат. Указатель наconst
объекты не могут быть использованы для записи в качествеconst
квалификатор налагает, что объект только для чтения.const
а такжеfar
указатели шириной 16 битов могут получить доступ ко всем областям памяти и большей части программного пространства. Во время выполнения при разыменовании проверяется содержимое указателя. Для адресов выше верхнего предела оперативной памяти доступ к программному пространству осуществляется с помощью инструкций чтения таблицы или записи таблицы. Адреса ниже верхнего предела оперативной памяти обращаются к пространству данных. Даже если адрес удерживается указателем наconst
находится в ОЗУ, расположение ОЗУ не может быть изменено. Параметры компоновщика по умолчанию всегда размещаютсяconst
данные по адресам, превышающим верхнюю границу пространства данных, чтобы при обращении к указателям можно было обращаться к правильному пространству памяти. Если выбранное целевое устройство имеет более 64 Кбайт памяти программного пространства, то только нижние 64 Кбайт могут быть доступны с помощью указателей шириной 16 бит. При условии, что все объекты программного пространства, которые должны быть разыменованы, находятся в младших 64-байтовых байтах, 16-битные указатели наconst
а такжеfar
объекты все еще могут быть использованы. Меньший размер указателя приводит к меньшему объему оперативной памяти и уменьшению объема создаваемого кода, поэтому его следует использовать по мере возможностиconst
а такжеfar
указатели шириной 24 бита могут получить доступ ко всем областям памяти и всему программному пространству. Во время выполнения при разыменовании проверяется содержимое указателя. Если бит 21 в адресе установлен, предполагается, что адрес является адресом ОЗУ. Бит № 21 адреса затем игнорируется. Если бит 21 очищен, то предполагается, что адрес принадлежит объекту в программном пространстве, и доступ осуществляется с использованием инструкций чтения таблицы или записи таблицы. Опять же, не допускается запись в объекты с использованием указателя наconst
, Обратите внимание, что при разыменовании 24-битного указателя наиболее значимый реализованный бит (бит номер 21) изTBLPTRU
реестр может быть перезаписан. Этот бит может использоваться для обеспечения доступа к области конфигурации устройства PIC18. Если загрузка регистров указателя таблицы из рукописного кода ассемблера, не делайте предположений о состоянии бита номер 21 до выполнения инструкций чтения или записи таблицы.
Цитаты взяты из руководства HI-TECH PICC18 v9.51.