Непонятная работа подпрограмм
- Войдите на сайт для отправки комментариев
Если не туда написал, извиняюсь. Но проблема меня одолела сильно... Не выполняет подпрограмму, как так!!!??? О_О
Имею некоторый опыт программирования (без привязки к какому-либо конкретному языку). Но это было давно. И на Си не писал, только читал. А сейчас потребовалось написать программку под Ардуину, но не хватает знания специфичных ардуинских особенностей.
Суть вопроса.
Знаю что есть setup и loop.
Создаю свою подпрограмму ShowEkran, для простоты скажем, что она рисует прямоугольник. (подключен экранчик)
Вызываю подпрограмму из setup. Прямоугольник не рисуется.
Вызываю из loop - тоже не рисует.
Если команду рисования прямоугольника непосредственно написать в теле loop - рисует. !!!???
Вот код. Думаю от аппаратной реализации зависит слабо, иБоардПро на Меге 2560, что-ли.
Сейчас команда рисования - в лупе, работает. Если выношу в подпрограмму - не рисует. ???!!!???
#include <UTFT.h> #include <UTouch.h> extern uint8_t SmallFont[]; extern uint8_t BigFont[]; extern uint8_t Dingbats1_XL[]; UTFT myGLCD(ITDB32S,38,39,40,41); UTouch myTouch(6,5,48,3,2); int KolvoKnMenu=6; int Ekran=0; int KnMenuX1[6]={70,150,230,70,150,230}; int KnMenuX2[6]={140,220,300,140,220,300}; int KnMenuY1[6]={10,10,10,90,90,90}; int KnMenuY2[6]={80,80,80,170,170,170}; int i; void ShowEkran() // *** ЭКРАН *** { } //end ShowEkran void setup() // ********* SETUP ************** { myGLCD.InitLCD(); myGLCD.clrScr(); myGLCD.setFont(SmallFont); myTouch.InitTouch(); myTouch.setPrecision(PREC_MEDIUM); myGLCD.setBackColor(VGA_BLACK); myGLCD.setColor(VGA_WHITE); Ekran=0; // Сначала – главное меню ShowEkran; // Рисуем главное меню } // end setup void void loop() // *************** LOOP ************* { if (Ekran==0) // Рисуем ЭКРАН ГЛАВНОГО МЕНЮ for (i=0;i<KolvoKnMenu;i++) myGLCD.drawRect(KnMenuX1[i],KnMenuY1[i],KnMenuX2[i],KnMenuY2[i]); // рисуем кнопки гл.меню } //end loop
а подпрограмму Вы в луп вставляете?
Вызов функции делается так: ShowEkran();
Вызов так - ShowEkran(); а не так ShowEkran; Не совсем успел )))
как насчет case?
как насчет case?
Блюсти.
Да-да-да!!! СПАСИБО! Скобки надо было поставить. Нарисовались прямоугольнички. Эвона как...
Какой тогда смыл "вызывать" подпрограмму без скобок? Почему компилятор не выдал ошибку?
Какой тогда смыл "вызывать" подпрограмму без скобок? Почему компилятор не выдал ошибку?
Без скобок - это не вызов, а взятие ее (функции) адреса. Компилятор не выдал ошибку потому, что это законная операция - может Вам её адрес нужен.
А впредь, когда есть вопрос, Вы публикуйте неработающий код тоже, а то Вы его не опубликовали и парням догадываться пришлось про скобки вместо того, чтобы сразу увидеть.
А впредь, когда есть вопрос, Вы публикуйте неработающий код тоже, а то Вы его не опубликовали и парням догадываться пришлось про скобки вместо того, чтобы сразу увидеть.
Про адреса-то то да, в Сиях это перенаворочено, зело дивился на фокусы эти ещё когда пытался им серьёзно заняться (да как-то тогда не дошло дело до непосредственно программирования). Понял.