Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Что можно использовать удобное, как структуру, но функционирующее, как дефайн?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
KilkennyCat
Суть:
Имеем кучу дефайнов, вида:

Код
#define a  0x01
#define b  0x05
#define c  0x0A


Когда их мало, не так страшно. А вот много - уже не запомнить.
Но если пойти таким путем:
Код
struct {
    unsigned char a; /* help */
    unsigned char b;
    unsigned char c;
} uuu = {0x01,0x05,0x0A}


то далее можно использовать в программе uuu.a, причем, установка точки после uuu вызывает список всех элементов, со справкой (ежели справка есть). Удобно. Очень. Но совершенно расточительно по ресурсам, ибо вся структура сохраняется как константы, и дальнейшее ее использование - вызов.

Enum тоже позволяет после точки вызвать список всех элементов:

Код
typedef enum {
   a = 0x01,
   b = 0x05,
   c = 0x0A
} uuu;


но использование в дальнейшем uuu.a среда позволяет, а компилятор - нет.

Вот и вопрос: возможно ли в MPLAB X XC8 что такое сделать, что совместит удобство разработки как со структурами (то есть вызов точкой списка элементов) с функционалом дефайнов (то есть с подстановкой значений)?


нашел небольшое решение: структуру объявить константой. В этом случае код становится несколько меньше, озу не тратится.
theBMV
А чем простой enum без typedef и имени не нравится? Сделайте префикс всем именам и после набора префикса нажимайте ctrl+пробел в mplabx.
Ещё удобство: если сделать переменную типа enum и использовать её в switch case, то компилятор предупредит об отсутствующих кейсах, если не для всех полей enum'а они сделаны
Iptash
Если вам
Цитата
#define a 0x01
тяжело запомнить, а
Цитата
uuu.a
кажется удобнее, то и пишите
Цитата
#define uuu.a 0x01
)))
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.