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


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.