Що таке "неподписаний знак поруч"?


12

Я прочитав таблицю даних і знайшов змінну, визначену як unsigned char near Sample_X. Що це, і чим це відрізняється unsigned char Sample_X?


3
можливо, дозволяє компілятору використовувати невеликі відносні компенсації?
Neil_UK

6
На основі досвіду роботи з x86 в DOS, я б очікував цього з деяким типом вказівника і в 16-бітовому середовищі. Тим не менш, те, що цитується в ОП, не схоже на покажчик, а посилання на аркуші даних передбачає деякий MCU. Шукайте ключове слово "поруч" за такими двома посиланнями: microchip.com/forums/m549709.aspx barrgroup.com/Embedded-Systems/How-To/Efficient-C-Code
frr

3
Слід зазначити, що це розширення компілятора, а не стандартне C
PlasmaHH

1
FYI, ключове слово, nearє прикладом специфікатора класу зберігання . Він повідомляє компілятору щось про те, як або де слід розподілити сховище для змінної. (Дивіться відповідь філо, нижче, для більш детальної інформації near).
Соломон повільно

1
Це справді тут тематично?
користувач541686

Відповіді:


20

MCU, вказаний тут, є Freescale MC9C08 серія , яка використовує дещо вдосконалену версію їх архітектури HC08. Це 8-бітове ядро, яке (як і багато таких) має більш короткі інструкції та швидший доступ до адрес "нульової сторінки", ніж інші. Адреси нульової сторінки мають лише 8 біт замість 16 біт, тому вказівки, що посилаються на них, можуть мати 2 байти замість 3, і в результаті потрібно 1 цикл менше .

Ключове слово "близько" дає змогу компілятору поставити змінну в "нульову сторінку", якщо це можливо, для кращої продуктивності. Компілятори, спеціально написані для вбудованої розробки, такі як ця , зазвичай реалізують такі розширення до мови (тут описано як "C підтримка нульової сторінки").


Мені подобається ця відповідь, але у вас є джерело вашої інформації?
Клонке

1
Я відредагував відповідь, щоб надати більш детальну інформацію та посилання. Насправді це від нової архітектури HCS08 Freescale, але це сумісно з кодом для старих архітектур HC08 та HC05. Архітектури 6800 та 6502 (позитивно стародавні) також тісно пов'язані між собою.
Хроматикс

Приємно, набагато краще!
Клонкекс

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

Більш-менш. Відмінність головним чином пов'язана з тим, що 8-бітні процесори зазвичай не мають банку реєстру, а лише один акумулятор і пару індексних регістрів. Але це також аналогічно використанню покажчиків "поблизу" та "далеко" на x86, оскільки існує різниця у розмірі адреси та в скільки часу потрібно для повного доступу.
Хроматикс

15

Залежно від архітектури процесора можуть бути різні інструкції щодо доступу до даних за різною адресою. Ось приклад від Keil для одного з їх укладачів.

Близький доступ має певний ліміт пам’яті, тому ви можете дати підказки компілятору розмістити деякі часто використовувані змінні в області, доступній короткими інструкціями (очевидно, що опис доступу до 32-бітного адресного простору більше 16-бітної адреси простір). Це може перевести на менший / швидший код.



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

@supercat Питання просто задається загалом, хоча відповіді зосереджені на старій архітектурі. Хтось обізнаний повинен написати відповідь на нього, пояснивши, як вони використовуються для 8-бітових мікроконтролерів.
цікаводанні

@curiousdannii: Код, про який йдеться, був написаний для 8-бітного мікрофона.
supercat
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.