FlexMenu - решение вопросов меню. Зацените.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: FlexMenu - решение вопросов меню. Зацените.
Demiurg, вряд ли так просто получится. Размер всего проекта выходит около 5кБ, что больше ограничения 4кБ на размер кода в IAR.
Да и смысла под проприетарные компиляторы подстраиваться особого нет. Вы бы ещё CodeVision упомянули...
Да и смысла под проприетарные компиляторы подстраиваться особого нет. Вы бы ещё CodeVision упомянули...
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: FlexMenu - решение вопросов меню. Зацените.
у меня зависимость от версии по минимуму, т.е. ниже определенной версии не будет поддержки __flash, а значит, и мои файлы не соберутся. но AVR Toolchain давно имеет соответствующую версию! почему у вас не собралось - не понимаю: я тестировал у себя от версии 4.9.2 и до 9.2.0Demiurg писал(а):Попробовал запустить в AVR Toolchain, оказывается у вас зависимость от версии.
это ваша личная хотелка - смотрите на WiseLord, он буквально за 5 минут запустил и на своем AVR (я тестировал на меге8, а он на меге328), и на stm32, и никаких скомпилированных проектов ему не потребовалось. я предоставил полностью готовые примеры с готовыми makefile для atmega8, в комплекте с протеусом - хоть собирайте сами, хоть тестируйте готовое! а остальное - "за свой счет"Demiurg писал(а):Это не моя личная хотелка.
самая порочная практика из всех, что я встречал - игнорировать рекомендации даташита, полагаясь на какие-то задержки. я так не делал, и не буду делать. и вам не советуюDemiurg писал(а):при этом без опроса флага готовности
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: FlexMenu - решение вопросов меню. Зацените.
Еб... Вы один из самых упоротых и узколобых собеседников. Это не эмоции. Мне есть с чем сравнивать. Я не знаю как вы пришли в программирование микроконтроллеров. Лично я, как и многие другие от железа. И программирование как таковое малая часть нашей деятельности. И вы сами по форумам видите, что у многих ситуация в разы хуже, чем у меня, к примеру.
Дисплеи по даташитам работают штатно, если соблюдать времянки. Без опроса флага готовности.
А впрочем, что я время теряю. По проекту меню откланиваюсь. ебитесь варитесь сами в собственном соку.
У меня на нынешний момент была единственная проблема - с необязательным параметром. Наверное пришло время решать её самому. Лично.
Дисплеи по даташитам работают штатно, если соблюдать времянки. Без опроса флага готовности.
А впрочем, что я время теряю. По проекту меню откланиваюсь. ебитесь варитесь сами в собственном соку.
У меня на нынешний момент была единственная проблема - с необязательным параметром. Наверное пришло время решать её самому. Лично.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: FlexMenu - решение вопросов меню. Зацените.
ARV, кстати, те модифицированные мною исходники не пробовали под windows собрать? Как avr, так и stm32 вариант?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: FlexMenu - решение вопросов меню. Зацените.
нет, не пробовал. у меня как-то с GIT не складывается... только и могу поглядеть файлы в браузере. с stm32 вообще никак не связан (ни тулчейна нет, ни МК), а под AVR не увидел какой-то заметной разницы в ваших модификациях. даже несколько удивлен количеству "лишних" файлов 
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Реклама
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: FlexMenu - решение вопросов меню. Зацените.
А что тогда вместо него предпочитаете? SVN?ARV писал(а):у меня как-то с GIT не складывается
Добавлено after 3 minutes 52 seconds:
Всё эти файлы avr_fmenu.* - это файлы проекта, чтобы открыть код в QtCreator. По сути, они не нужны для сборки. Достаточно только в PATH иметь make и компилятор (avr-gcc и arm-none-eabi-gcc соответственно).ARV писал(а):даже несколько удивлен количеству "лишних" файлов
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: FlexMenu - решение вопросов меню. Зацените.
вы будете смеяться: внешний дискWiseLord писал(а):А что тогда вместо него предпочитаете?
я использую Eclipse, и много раз хотел как-то приспособить либо встроенную в него возможность контроля версий, либо при помощи плагинов что-то подключить... но так и не уразумел, как всем этим добром пользоваться, чтобы "на кнопочку нажал - и готово". поэтому вот так как-то...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: FlexMenu - решение вопросов меню. Зацените.
А я пользуюсь QtCreator, в котором тоже есть поддержка разных систем контроля версий, но я эти функционалом не пользуюсь.ARV писал(а):я использую Eclipse, и много раз хотел как-то приспособить либо встроенную в него возможность контроля версий, либо при помощи плагинов что-то подключить... но так и не уразумел, как всем этим добром пользоваться
Вот и Вам я бы посоветовал изучить эти несколько команд консольного git, и пользоваться ими. А когда войдёте во вкус и поймёте, как это работает "снизу" - можно положить и IDE- шным функционалом пользоваться, если возникнет желание.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: FlexMenu - решение вопросов меню. Зацените.
да не вы первый мне это советуете... но я очень ленивый: это ж надо консоль открывать, команды вбивать... еще помнить их... не, мне или "кнопочку", или уж по-старинке - на внешний диск Total Commander-омWiseLord писал(а):я бы посоветовал изучить эти несколько команд консольного git
сейчас я вообще все на внешнем диске держу: и проекты, и тулченый, и Eclipse (пользуюсь тем, что Eclipse можно обдурить, введя в него относительные пути)... зато могу на любом компе работать, хоть в гостях
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: FlexMenu - решение вопросов меню. Зацените.
Нет, по мне - написание кода без истории и системы контроля версий - это просто мазохизм.
Помнить максимум десяток простых (двухсловных) команд - это проще, чем помнить для всего объёма кода, зачем вот в этом месте была заведена какая-то переменная год назад, и почему два года назад я вот тут сделал вот так.
Вот минимальный список команд - просто для локальной работы:
Этого вполне достаточно просто для хранения истории своих изменений в каталоге "на внешнем диске"
А если захочется свой локальный репозиторий на тот же Github отправлять или оттуда забирать - то ещё понадобятся пара команд:
А дальше уже есть другие "фишки", типа как работа с несколькими ветками кода - когда можно временно переключиться на другую ветку, сделать в ней пару "рабочих" коммитов, потом вернуться на основное состояние и работать дальше там. Но это уже после "вхождения во вкус".
Не так уж и сложно запомнить, как по мне.
А особая прелесть - когда есть несколько проектов с похожим кодом (кусками кода), и нужно изменения в одном проекте забрать в другой - тоже всё упрощается донельзя. Но это уже чуть более высокий уровень владения Git-ом.
Добавлено after 17 minutes 37 seconds:
А вот небольшая иллюстрация локальной работы с Git в изначально пустом каталоге:

Помнить максимум десяток простых (двухсловных) команд - это проще, чем помнить для всего объёма кода, зачем вот в этом месте была заведена какая-то переменная год назад, и почему два года назад я вот тут сделал вот так.
Вот минимальный список команд - просто для локальной работы:
Код: Выделить всё
git init - создать в некотором рабочем каталоге git репозиторий
git add <относительный путь> - добавить текущие изменения в файл(ах)/каталогу в список для индексации
gid commit - зафиксировать список для индексации (создать коммит в истории с текущим состоянием дерева проекта)
git log - посмотреть историю коммитов
git show <хэш коммита> - посмотреть изменения, сделанные в этом комите.А если захочется свой локальный репозиторий на тот же Github отправлять или оттуда забирать - то ещё понадобятся пара команд:
Код: Выделить всё
git push - отправить текущее состояние (последний коммит со всей историей) на удалённый сервер
git pull - забрать последние изменения с сервера (если, к примеру, работали на другой машине и пушили раньше оттуда на сервер)
Не так уж и сложно запомнить, как по мне.
А особая прелесть - когда есть несколько проектов с похожим кодом (кусками кода), и нужно изменения в одном проекте забрать в другой - тоже всё упрощается донельзя. Но это уже чуть более высокий уровень владения Git-ом.
Добавлено after 17 minutes 37 seconds:
А вот небольшая иллюстрация локальной работы с Git в изначально пустом каталоге:
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: FlexMenu - решение вопросов меню. Зацените.
теорию я знаю. но применять её на практике... увы.
Eclipse дает мне возможность иметь локальную историю изменений, я насроил до 100 предыдущих вариантов - и мне пока хватает без всяких Git-ов.
а осальное для работы с Git в Eclipse совсем не интуитивно (для меня). а я уже устал заниматься тем, что всякий раз что-то углубленно изучать и настраивать только для того, чтобы потом пару раз поиспользовать.
мне бы кнопочку...
Eclipse дает мне возможность иметь локальную историю изменений, я насроил до 100 предыдущих вариантов - и мне пока хватает без всяких Git-ов.
а осальное для работы с Git в Eclipse совсем не интуитивно (для меня). а я уже устал заниматься тем, что всякий раз что-то углубленно изучать и настраивать только для того, чтобы потом пару раз поиспользовать.
мне бы кнопочку...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: FlexMenu - решение вопросов меню. Зацените.
В общем собрал все вместе:у каждого пункта меню свой уникальный идентификатор id.
Самих функций здесь не много
Само меню выглядит такнавигация по меню как я выше уже написал, у каждого меню свой уникальный идентификатор id, берется отсюдав основной программе я получаю этот id текущего пункта менюи отправляю на исполнение к примеру таквсе просто и без всяких высоко интеллектуальных заморочек.
Последнее можно заменить нано мне показалось так интересней.
Спойлер
Описание менюКод: Выделить всё
typedef const struct Menu_Item {
const struct Menu_Item *Next; /**< Указатель на следующий пункт меню этого пункта меню */
const struct Menu_Item *Previous; /**< Указатель на предыдущий пункт меню этого пункта меню */
const struct Menu_Item *Parent; /**< Указатель на родительский пункт меню этого пункта меню */
const struct Menu_Item *Child; /**< Указатель на дочерний пункт меню этого пункта меню */
const char id;
} Menu_Item_t;Самих функций здесь не много
Код: Выделить всё
#define MENU_ITEM(Name, Next, Previous, Parent, Child, id) \
extern Menu_Item_t const Next; \
extern Menu_Item_t const Previous; \
extern Menu_Item_t const Parent; \
extern Menu_Item_t const Child; \
Menu_Item_t const Name = {&Next, &Previous, &Parent, &Child, id}
#define MENU_PARENT (Menu_GetCurrentMenu()->Parent)
#define MENU_CHILD (Menu_GetCurrentMenu()->Child)
#define MENU_NEXT (Menu_GetCurrentMenu()->Next)
#define MENU_PREVIOUS (Menu_GetCurrentMenu()->Previous)
extern Menu_Item_t NULL_MENU;
Menu_Item_t NULL_MENU = {0};
static void (*MenuWriteFunc)(const char* Text) = NULL;
static Menu_Item_t* CurrentMenuItem = &NULL_MENU;
Menu_Item_t* Menu_GetCurrentMenu(void)
{
return CurrentMenuItem;
}
void Menu_Navigate(Menu_Item_t* const NewMenu)
{
if ((NewMenu == &NULL_MENU) || (NewMenu == NULL))
return;
CurrentMenuItem = NewMenu;
}Код: Выделить всё
MENU_ITEM(Menu_1, Menu_2, NULL_MENU, NULL_MENU, NULL_MENU, SETTING_ENTER); // Settings
MENU_ITEM(Menu_2, Menu_2_1, Menu_1, Menu_5, NULL_MENU, CALIBRATIONS_DEVICES); // Calibrations Devices
MENU_ITEM(Menu_2_1, Menu_2_1_1, Menu_2, Menu_2_2, Menu_2_1, CALIBRATION_VOLTMETER); // Calibration of the voltmeter
MENU_ITEM(Menu_2_2, Menu_2_2_1, Menu_2, Menu_2_2, Menu_2_1, CALIBRATION_AMMETER); // Calibration of the ammeter
MENU_ITEM(Menu_2_1_1, Menu_2_1_2, Menu_2_1, NULL_MENU, NULL_MENU, VOLTMETER_1); //
MENU_ITEM(Menu_2_1_2, Menu_2_1_1, Menu_2_1, NULL_MENU, NULL_MENU, VOLTMETER_2); //
Код: Выделить всё
Menu_Navigate(MENU_NEXT);
Menu_Navigate(MENU_PREVIOUS);
Menu_Navigate(MENU_CHILD);
Menu_Navigate(MENU_PARENT);Код: Выделить всё
STATE ( NOT, NULL ),
STATE (SETTING_ENTER, settings_enter ),
STATE (CALIBRATIONS_DEVICES, Calibrations_Devices ),
STATE (CALIBRATION_VOLTMETER, Calibration_Voltmeter ),
STATE (VOLTMETER_1, Voltmeter_1 ),
STATE (VOLTMETER_2, Voltmeter_2 ),Код: Выделить всё
volatile Menu_Item_t* menu = &NULL_MENU;
menu = Menu_GetCurrentMenu();
id = menu->id;
if(id) proc_device(id);Код: Выделить всё
void proc_device (char id)
{
_proc_device = id;
proc_fsm_func (proc_device_func, _proc_device);
}
void proc_fsm_func (FUNC __flash *ptr_func, unsigned char s)
{
ptr_func [s] ();
}
const FUNC proc_device_func [PROC_DEVICE_STATES] =
{
#define STATE(name, func) func
#include "func.h"
#undef STATE
};
Код: Выделить всё
// Menus function
void settings_enter(void)
{
lcd_gotoxy (4,0);
lcd_putstring ("Settings");
}
void Calibrations_Devices(void)
{
lcd_gotoxy (0,0);
lcd_putstring ("Calibrations");
lcd_gotoxy (0,1);
lcd_putstring ("Devices");
}Последнее можно заменить на
Код: Выделить всё
typedef enum{
standard_screen, //0 стандартный екран
setting_enter, // меню настроек
calibrations_devices, //
calibration_voltmeter, //
voltmeter_1, //
voltmeter_2, //
} display;
switch(id)
{
case setting_enter:
settings_enter();
break;
case calibrations_devices:
Calibrations_Devices();
break;
case calibration_voltmeter:
Calibration_Voltmeter();
break;
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: FlexMenu - решение вопросов меню. Зацените.
ну так это у вас полчилоь классическое меню, без возможности делать динамичекое название пункта, без встроенного редактирования параметров...
по id перебирать варианты... оно, конечно, полезно, но скучновато...
по id перебирать варианты... оно, конечно, полезно, но скучновато...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: FlexMenu - решение вопросов меню. Зацените.
Я же вам писал, запятую поставьте там где мне надо
Опрос кнопок, на BTN_SHRT1 и BTN_SHRT2 энкодер виситвывод функцииА еще и поморгать чем нибудь, к примеру так
Спойлер
МенюКод: Выделить всё
// Menus Name | Next | Prev | Parent | Child | SelectFunction
MENU_ITEM(Menu_5_1_1, NULL_MENU, Menu_5_1, NULL_MENU, NULL_MENU, T_VOLTAGES); ///Код: Выделить всё
if (button == BTN_SHRT4) {
lcd_clear();//очистка LCD и перевод курсора в 0.0
Menu_Navigate(MENU_NEXT);
if(id == T_VOLTAGES) { if(table_u++ == U_33) table_u = U_33; }
}
if (button == BTN_SHRT3) {
lcd_clear();//очистка LCD и перевод курсора в 0.0
Menu_Navigate(MENU_PREVIOUS);
}
if (button == BTN_SHRT2) {
switch(id)
{
case CALIBRATIONS_DEVICES:
case CALIBRATION_TABLE:
case CALIBRATION_VOLTMETER:
case CALIBRATION_AMMETER:
case TABLE_VOLTAGES:
case TABLE_CURRENT:
lcd_clear();//очистка LCD и перевод курсора в 0.0
Menu_Navigate(MENU_CHILD);
break;
default: break;
}
if(id == T_VOLTAGES) {variable[table_u].U_table--; variable[table_u].U_table = normalize (((int16_t)variable[table_u].U_table), ((int16_t)(0)), ((int16_t)(UImax_pwm)));}
}
if (button == BTN_SHRT1) {
switch(id)
{
case CALIBRATIONS_DEVICES:
case CALIBRATION_TABLE:
case CALIBRATION_VOLTMETER:
case CALIBRATION_AMMETER:
case TABLE_VOLTAGES:
case TABLE_CURRENT:
lcd_clear();//очистка LCD и перевод курсора в 0.0
Menu_Navigate(MENU_PARENT);
break;
default: break;
}
if(id == T_VOLTAGES) {variable[table_u].U_table++; variable[table_u].U_table = normalize (((int16_t)variable[table_u].U_table), ((int16_t)(0)), ((int16_t)(UImax_pwm)));}
}
Код: Выделить всё
void T_voltages (void)
{
lcd_gotoxy (0, 0);
lcd_putstring("Set");
lcd_gotoxy (13, 0);
sprintf (string_out,"%02dV",(uint8_t)table_u);
lcd_putstring (string_out);
lcd_gotoxy (0, 1);
sprintf (string_out,"DAC=%04d",variable[table_u].U_table);
lcd_putstring (string_out);
lcd_gotoxy (9,1);
sprintf (string_out,"\"%2d.%02d\"", x_u_izm/100, (x_u_izm)%100);
lcd_putstring (string_out);
}Код: Выделить всё
if((millis() - previousMillis) > 500){
previousMillis = millis();
blink = !blink;
}
lcd_gotoxy (0,1);
if (blink) lcd_putchar(0x22); else lcd_putchar(0x20);
lcd_gotoxy (1, 1);
sprintf (string_out,"%04d",Imax_adc);
lcd_putstring_flash (string_out);
lcd_gotoxy (5,1);
if (blink) lcd_putchar(0x22); else lcd_putchar(0x20);
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: FlexMenu - решение вопросов меню. Зацените.
Dimon456 писал(а):запятую поставьте там где мне надо
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: FlexMenu - решение вопросов меню. Зацените.
ARV, все равно чуть ли не для каждого пункта меню вы будете писать свою функцию, универсальности здесь нет и не зачем усложнять высокоинтеллектуальными кодами в которых трудно разобраться.
Попробуйте написать мой пункт меню T_voltages на своем FlexMenu с тем же алгоритмом и стем же отображением на lcd?
Попробуйте написать мой пункт меню T_voltages на своем FlexMenu с тем же алгоритмом и стем же отображением на lcd?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: FlexMenu - решение вопросов меню. Зацените.
отнюдь.Dimon456 писал(а):все равно
я задумал упростить типичные пункты меню, сделав из сразу готовыми фукнциями. при этом возможность сделать свою уникальную для вывода уникального содержимого так же имеется. вы же исключили в принципе возможность упрощения чего-либо. так что не все равно. в качестве универсального решения вы предложили самое примитивное. да, оно 100% универсально - бери напильник и допиливай под себя.
я преложил решение, которое хоть на 10%, но позволяет обойтись без напильника. множество настроек могут быть реализованы изначальным вариантом FlexMenu практически без усиилий программиста, разве что описать тип данных придется, и выделить ячейки EEPROM под них.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: FlexMenu - решение вопросов меню. Зацените.
[uquote="ARV",url="/forum/viewtopic.php?p=3838646#p3838646"]
[/uquote]
Да ладно! Все времена выполнения команд как раз таки в ДШ чётко расписаны. Да и к чему эти излишние телодвижения с готовностью и с дополнительным пином?
самая порочная практика из всех, что я встречал - игнорировать рекомендации даташита, полагаясь на какие-то задержки. я так не делал, и не буду делать. и вам не советуюDemiurg писал(а):при этом без опроса флага готовности
Да ладно! Все времена выполнения команд как раз таки в ДШ чётко расписаны. Да и к чему эти излишние телодвижения с готовностью и с дополнительным пином?
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: FlexMenu - решение вопросов меню. Зацените.
А в чем сакральный смысл наличия бита готовности, если можно по задержкам?
Имхо, дело в том, что задержки указываются для определенных условий, например, тактовой частоты контроллера дисплея. А разные производители разных дисплеев вольны выбирать разные частоты... И разработчик обречен на штудирование документации при каждой смене поставщика или производителя... Или разработчик делает по готовности, и спит спокойно при любых ветрах перемен.
Что практичнее?
Имхо, дело в том, что задержки указываются для определенных условий, например, тактовой частоты контроллера дисплея. А разные производители разных дисплеев вольны выбирать разные частоты... И разработчик обречен на штудирование документации при каждой смене поставщика или производителя... Или разработчик делает по готовности, и спит спокойно при любых ветрах перемен.
Что практичнее?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: FlexMenu - решение вопросов меню. Зацените.
ARV, я даже и не думал что так будет работатьменюсама функция
Спойлер
idКод: Выделить всё
STATE (STANDARD_SCREEN, standard_screen ), //
STATE (MODE_BP, standard_screen ), //
STATE (POWER, standard_screen ), //
STATE (CHARGE, standard_screen ), //
STATE (OPERATION, standard_screen ), //
STATE (TIMING, standard_screen ), //Код: Выделить всё
// Menus Name | Next | Prev | Parent | Child | SelectFunction
MENU_ITEM(Menu_0, Menu_0_2, NULL_MENU, NULL_MENU, NULL_MENU, STANDARD_SCREEN); //
MENU_ITEM(Menu_0_2, Menu_0_3, NULL_MENU, NULL_MENU, NULL_MENU, MODE_BP); //
MENU_ITEM(Menu_0_3, Menu_0_4, NULL_MENU, NULL_MENU, NULL_MENU, POWER); //
MENU_ITEM(Menu_0_4, Menu_0_5, NULL_MENU, NULL_MENU, NULL_MENU, CHARGE); //
MENU_ITEM(Menu_0_5, Menu_0_6, NULL_MENU, NULL_MENU, NULL_MENU, OPERATION); //
MENU_ITEM(Menu_0_6, Menu_0, NULL_MENU, NULL_MENU, NULL_MENU, TIMING); //Код: Выделить всё
void standard_screen (void)
{
lcd_gotoxy (0,0);
sprintf (string_out,...;
lcd_putstring (string_out);
lcd_gotoxy (9,0);
sprintf (string_out,...;
lcd_putstring (string_out);
lcd_gotoxy (0,1);
sprintf (string_out,...;
lcd_putstring (string_out);
//дополнительная информация
lcd_gotoxy (9, 1);
if(id==STANDARD_SCREEN){ //
sprintf (string_out,...;
lcd_putstring (string_out);
}
if(id==MODE_BP){ //
sprintf (string_out,...;
lcd_putstring (string_out);
}
if(id==POWER){ //
sprintf (string_out,...;
lcd_putstring (string_out);
}
if(id==CHARGE){ //
sprintf (string_out,...;
lcd_putstring (string_out);
}
if(id==OPERATION){ //
sprintf (string_out,...;
lcd_putstring (string_out);
}
if(id==TIMING){ //
sprintf (string_out,...;
lcd_putstring (string_out);
}
}

