Что такое «неподписанный символ рядом»?


12

Я прочитал таблицу данных и нашел переменную, определенную как unsigned char near Sample_X. Что это такое и чем оно отличается unsigned char Sample_X?


3
возможно, позволяет компилятору использовать небольшие относительные смещения?
— Neil_UK

6
Основываясь на частичном опыте с x86 в DOS, я ожидал бы этого с некоторым типом указателя и в 16-битной среде. Однако то, что указано в OP, не похоже на указатель, а ссылка на таблицу данных подразумевает некоторый MCU. Выполните поиск по ключевому слову «рядом» по следующим двум ссылкам: microchip.com/forums/m549709.aspx barrgroup.com/Embedded-Systems/How-To/Efficient-C-Code
— 1818 г.

3
Следует отметить, что это расширение компилятора, а не стандартное C
— PlasmaHH

Это может быть о СКК. Учитывая, что код в основном предназначен для MCU, он может быть косвенным предложением для компоновщика при поддержке компилятора для размещения его в CCM (ядро с привязкой к памяти), если оно доступно.
— Айхан

1
Ключевое слово FYI near- пример спецификатора класса хранилища . Он сообщает компилятору о том, как или где должно быть выделено хранилище для переменной. (См. Ответ Фило ниже, чтобы узнать больше near).
— Соломон Медленный

Ответы:


20

MCU, указанный здесь, представляет собой серию Freescale MC9C08 , в которой используется слегка улучшенная версия их архитектуры HC08. Это 8-битное ядро, которое (как и многие другие) имеет более короткие инструкции и более быстрый доступ к адресам «нулевой страницы», чем другие. Адреса нулевых страниц имеют длину всего 8 бит вместо 16 бит, поэтому ссылки на них могут составлять 2 байта вместо 3, и в результате на выполнение уходит на 1 цикл меньше .

Ключевое слово «near» указывает компилятору поместить переменную в «нулевую страницу», если это возможно, для лучшей производительности. Компиляторы, специально написанные для разработки встраиваемых систем, такие как этот , обычно реализуют такие расширения языка (здесь описывается как «Поддержка C для нулевой страницы»).


Мне нравится этот ответ, но есть ли у вас источник вашей информации?
— Clonkex

1
Я отредактировал ответ, чтобы предоставить больше деталей и ссылок. На самом деле это новая архитектура Freescale HCS08, но она совместима по коду со старыми архитектурами HC08 и HC05. Архитектуры 6800 и 6502 (ныне положительно древние) также тесно связаны.
— Chromatix

Хорошо, намного лучше!
— Clonkex

Таким образом, его использование очень похоже на registerключевое слово (для случаев, когда вы действительно уверены, что именно здесь вам нужна оптимизация), но немного менее экстремально?
— vsz

Более или менее. Разница в основном связана с тем, что 8-разрядные процессоры, как правило, сами по себе не имеют банка регистров, только один аккумулятор и несколько регистров индекса. Но это также аналогично использованию указателей «ближний» и «дальний» в x86, поскольку существует разница в размере адреса и времени, необходимом для завершения доступа.
— Chromatix

15

В зависимости от архитектуры ЦП могут быть разные инструкции для доступа к данным по разным адресам. Вот пример из Keil для одного из их компиляторов.

Ближайший доступ имеет определенный предел памяти, поэтому вы можете дать указание компилятору разместить некоторые часто используемые переменные в области, доступной с помощью более коротких инструкций (очевидно, описание доступа к 32-разрядному адресному пространству превышает 16-разрядный адрес Космос). Это может привести к уменьшению / ускорению кода.



5
@AndrewMorton: Этот вопрос относится к farи nearуказателям на основной устаревшую 8086 архитектуры. Одни и те же ключевые слова используются в связанном, но разном виде на 8-битных микроконтроллерах.
— суперкат

@supercat Вопрос обычно задается, хотя ответы сосредоточены на старой архитектуре. Кто-то знающий должен написать на нем ответ, объясняющий, как они используются для 8-битных микроконтроллеров.
— curiousdannii

@curiousdannii: рассматриваемый код был написан для 8-битного микро.
— суперкат
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.