Буферы данных 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.

Другие вопросы по тегам