Ответ

Предупреждение: в данной теме не было сообщений более 730 дней.
Если не уверены, что хотите ответить, то лучше создайте новую тему.
Имя:
E-mail:
Тема:
Иконка:

Визуальная проверка:
Как корова на:
Корень квадратный из 36 (цифрой):
Белое солнце ...:

подсказка: нажмите alt+s для отправки или alt+p для предварительного просмотра сообщения


Сообщения в этой теме

Автор: kodak_service
« : 12 Апреля 2016, 10:30:17 »

Думаю, что это полуавтоматический бот (типа первых машин для игры в шахматы с человеком внутри)  ;D
Автор: Andy
« : 12 Апреля 2016, 10:20:07 »

Боты какие то умные пошли, по Си вопросы задают...  :o
Автор: kodak_service
« : 12 Апреля 2016, 09:05:11 »

Ёпрст... :o
Андрей, ты начал общаться с ботами? ;)
Автор: Andy
« : 12 Апреля 2016, 03:28:06 »

Перечитав некоторую инфу по С я так понял что нужно прописывать что-то вроде

wc.lpszMenuName=НАЗВАНИЕ_ФУНКЦИИ_С_МЕНЮ;

Где можно найти инфу о том как прописывать эту функцию?

_______________
 
Белоснежка И Охотник 2

В данном синтаксисе переменной присваивается указатель на функцию. Прочитать можно много где, например здесь

http://www.sbp-program.ru/c/sbp-c-function-pointer.htm
Автор: Thomaslism
« : 11 Апреля 2016, 20:59:40 »

Перечитав некоторую инфу по С я так понял что нужно прописывать что-то вроде

wc.lpszMenuName=НАЗВАНИЕ_ФУНКЦИИ_С_МЕНЮ;

Где можно найти инфу о том как прописывать эту функцию?

_______________
 
Белоснежка И Охотник 2
Автор: pumpkin
« : 10 Ноября 2013, 17:20:10 »

Цитировать
Поэтому "всего-то" надо как то впихнуть массив вместо строки. 
Ну тогда инициализировать пустыми, а потом в коде присваивать.
Или не использовать это меню as is, а видоизменьить меню по-своему как-нибудь.
Автор: Andy
« : 10 Ноября 2013, 17:11:24 »

Ага, таблицы я часто использую, особенно когда ее размер меньше, чем код программной реализации того же функцианала. Но в данном случае таблица занимает лишнее место в памяти. В массиве меню УЖЕ  есть вся необходимая информация, просто "кодировка не та". И больше никогда не пригодися для других дисплеев, так как разводить плату с сегментниками  и драйвером лучше и нужно всегда одинаково. Поэтому "всего-то" надо как то впихнуть массив вместо строки.
Автор: pumpkin
« : 10 Ноября 2013, 17:01:44 »

Имею в виду избавиться, если пойти по вот этому пути:
Цитировать
MENU_ITEM(Menu_1, Menu_2, Menu_3, NULL_MENU, NULL_MENU, NULL, NULL, "PL.10^");
MENU_ITEM(Menu_2, Menu_3, Menu_1, NULL_MENU, NULL_MENU, NULL, NULL, "0BG-^");
MENU_ITEM(Menu_3, Menu_1, Menu_2, NULL_MENU, NULL_MENU, NULL, NULL, "CT0-^");

void PrintLED_F(BYTE *mass ){
  char* table = "\\x00\\x35\\x77\\x55\\xff\\x00............. ";
  SPI_Init();
  STB_LOW;
  OutLED(DispAdressSet);

  while (pgm_read_byte(mass)!=\'^\'){
    if (pgm_read_byte(mass)==\'.\'){
      pgm_read_byte(mass++);
      OutLED(table[pgm_read_byte(mass++)]|0x80); //Выводим символ с точкой
      }
    OutLED(table[pgm_read_byte(mass++)]);
  }
  STB_HI;
}

Тут еще легче радактируется.
Автор: Andy
« : 10 Ноября 2013, 16:53:26 »

Как это интерестно избавится? Эта конструкция хотя бы леко редактируется. А на сегментник все равно строго определенные байты нужны, и нкуда от этого не денешся. Дефайны НЕ компилируюся в код в данном случае кроме цифр, а служат основой для удобного задания массивов псевдострок. Правда с названием меню приходится помучатся, но таково требование заказчика - поставить семисегментик. Он еще с драйвером, управляется по SPI.
Автор: pumpkin
« : 10 Ноября 2013, 15:31:33 »

Цитировать
Жалко всю таблицу в код тащить, там нужен то десяток символов, а в твоем приемере она вообще будет в озу висеть. И раскиданы они по всему полю...
Ну это-то да, если бы не русская П, то в 85 уложилось бы. Можно попробовать оптимизировать.

Хотя избавление от конструкций вида   BYTE Version  [] PROGMEM = {_P_ , _L_ , _POINT_ , _1_, _0_, _END_}  ; //"PLAT.10"   должно компенсировать эти байты.
Автор: Andy
« : 10 Ноября 2013, 15:14:06 »

Ну я исходил из того, что строки - это суть массивы. Какая хрен разница - строка или массив, думал поменять пару строк где-то и все. И в меню передавать тупо массив. И макрос pgm_read_byte один на все  типы массивов, только там он почему то pgm_read_word...
Автор: pumpkin
« : 10 Ноября 2013, 14:59:32 »

Там, в первом вопросе проблема в том, что глобальные статические переменные можно инициализировать только константами и литеральными строками (типа "юроюлрпаобаьрвтчпак").
Так что придется обходить одним из вышеперечисленных способов.
Автор: Andy
« : 10 Ноября 2013, 14:50:08 »

Точно, забыл старое меню удалить, там видимо искал эту функцию, спасибо.

Цитировать
BYTE table[256] = {0x00,0x35,0x77,0x55,0xff,0x00, ............. };

Жалко всю таблицу в код тащить, там нужен то десяток символов, а в твоем приемере она вообще будет в озу висеть. И раскиданы они по всему полю...
Автор: pumpkin
« : 10 Ноября 2013, 09:35:58 »

По второму вопросу:
Цитировать
      switch (GetButtonPress())
                       {
                             case UP:
                                   Menu_Navigate(MENU_PREVIOUS);
                                   break;
                             case DOWN:
                                   Menu_Navigate(MENU_NEXT);
                                   break;
                             case ENTER:
                                   Menu_EnterCurrentItem();
                                   Menu_Navigate(Menu_GetCurrentMenu());
                                   break;
                             default:
                                   break;
                       }
Автор: Andy
« : 10 Ноября 2013, 09:08:14 »

Угу, сегментник,  буду расбиратся, спасибо!