Нужна помощь!

Maximus
Offline
Зарегистрирован: 24.07.2015

Добрый день товарищи !! Не могу понять в чем причина ошибки.... Короче пишу сейчас меню для жкрана с кнопками. Пока состряпал структуру.  Конечный элемент структыры имеет адрес указателя функции.Так вот когда писал его в КОдБлоксе, все работает и шикарно. Как залил код в Arduino IDE , так начал ругатся на преобразование типов. Ардуино держу в руках первый раз, пожтому подскажите что не так делаю. Спасибо!Ниже код полный 


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void menu_new(char *,char *,char *,char *,int *,int *,void *);
int summ3(int,int);
int summ4(int,int);
int summ5(int,int);
void Arduino(void);
int hj=8;
 typedef struct M {
struct M *down;
struct M *up;
struct M *child_head;
struct M *child_end;
char name[20];
} menu;

static menu *pos1;//указатель на структуры основного меню
static menu *pos2;//указатель на структуру подменю
static int *funcia1;
static int *funcia2;
static int *funcia3;
static menu *current;//указатель на конец и начало дерева
static menu *current2;//Указатель для передвижения по меню
static menu base;

int main(){
current=&base;
base.down=base.up=base.child_end=base.child_head=&base;

menu_new("Maxim","Ves","Rost","IQ",summ3(67,6),summ4(167,5),Arduino);
while(1){
  
}

}



void menu_new(char *name_menu,char *name_podmenu1,char *name_podmenu2,char *name_podmenu3,int *summ3,int *summ4,void *Arduino){
pos1=(menu*)malloc((sizeof(menu)));
pos1->down=current->down;
pos1->up=current;
current->down->up=pos1;
current->down=pos1;
strcpy(pos1->name,name_menu);
pos1->child_head=pos1->child_end=pos1;

pos2=(menu*)malloc(sizeof(menu));
pos2->up=pos1;
pos2->down=pos1;
pos1->child_head=pos2;
pos1->child_end=pos2;
pos2->child_end=(menu*)&summ;
pos2->child_head=(menu*)&summ;
strcpy(pos2->name,name_podmenu1);

pos2=(menu*)malloc(sizeof(menu));
pos2->up=pos1->child_end;
pos2->down=pos1;
pos1->child_end->down=pos2;
pos1->child_end=pos2;
pos2->child_end=(menu*)&summ2;
pos2->child_head=(menu*)&summ2;
strcpy(pos2->name,name_podmenu2);

pos2=(menu*)malloc(sizeof(menu));
pos2->up=pos1->child_end;
pos2->down=pos1;
pos1->child_end->down=pos2;
pos1->child_end=pos2;
pos2->child_end=(menu*)&Arduino;
pos2->child_head=(menu*)&Arduino;
strcpy(pos2->name,name_podmenu3);
}

int summ3(int a,int b){
int c;
c=a+b;
return c;
}

int summ4(int a,int b){
int c;
c=a+b;
return c;
}

int summ5(int a,int b){
int c;
c=a+b;
return c;
}

void Arduino(){
hj=hj+1;
}

 

Maximus
Offline
Зарегистрирован: 24.07.2015

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

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

странная запись

ты вначале фукнции объявляешь? это не надо

41 строка и далее непонятна. что за запись такая

да void setup и loop не увидел

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

jeka_tm пишет:

странная запись

ты вначале фукнции объявляешь? это не надо

41 строка и далее непонятна. что за запись такая

да void setup и loop не увидел

 писал его в КОдБлоксе, все работает и шикарно.

пойду на туалетной бумаге напишу что нибуть.. а если не заработает то приду за помощью

Maximus
Offline
Зарегистрирован: 24.07.2015

setup -main, loop- while(1);

 

После 41 строчки , динамичесеки ыделю паямять под указатель Pos1 , потом присваеваю его элементам структур значения и по такому же принципи создаю pos2. Получается динамическое дерево.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

короче хочешь чтобы было как ты хочешь и игнорируешь структуру скетча в ардуино

 

Maximus
Offline
Зарегистрирован: 24.07.2015

От этого ничего не изменится. Короче понятно. Мне тут ни кто не поможет 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну и вали раз ничего не изменится) 

Maximus
Offline
Зарегистрирован: 24.07.2015

Отвечу на свой вопрос Сам. Я не правильно работал с указателями на функцию, вот статья на эту тему http://www.amse.ru/courses/cpp2/2011_04_11.html

Вот код. Там все понятно. 


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void menu_new(char *,char *,char *,char *,int (*myFunc4)(int, int),int (*myFunc5)(int, int),void(*Arduino12)(void));
int summ3(int,int);
int summ4(int,int);
int summ5(int,int);
void Arduino(void);

int hj=8;

 typedef struct M {
struct M *down;
struct M *up;
struct M *child_head;
struct M *child_end;
char name[20];
} menu;

static menu *pos1;//указатель на структуры основного меню
static menu *pos2;//указатель на структуру подменю
static int *funcia1;
static int *funcia2;
static int *funcia3;
static menu *current;//указатель на конец и начало дерева
static menu *current2;//Указатель для передвижения по меню
static menu base;

int main(){
current=&base;
base.down=base.up=base.child_end=base.child_head=&base;
int (*myFunc3) (int, int);
        myFunc3 = summ3;
int (*myFunc4) (int, int);
        myFunc4 = summ4;
int (*myFunc5) (int, int);
        myFunc5= summ5;
void (*Arduino12)(void);
        Arduino12 = Arduino;

menu_new("Maxim","Ves","Rost","IQ",(*myFunc3),(*myFunc4),(*Arduino12));
while(1){
  
}

}



void menu_new(char *name_menu,char *name_podmenu1,char *name_podmenu2,char *name_podmenu3,int (*myFunc4)(int, int),int (*myFunc5)(int, int),void(*Arduino12)(void)){
pos1=(menu*)malloc((sizeof(menu)));
pos1->down=current->down;
pos1->up=current;
current->down->up=pos1;
current->down=pos1;
strcpy(pos1->name,name_menu);
pos1->child_head=pos1->child_end=pos1;

pos2=(menu*)malloc(sizeof(menu));
pos2->up=pos1;
pos2->down=pos1;
pos1->child_head=pos2;
pos1->child_end=pos2;
pos2->child_end=(menu*)myFunc4;
pos2->child_head=(menu*)myFunc4;
strcpy(pos2->name,name_podmenu1);

pos2=(menu*)malloc(sizeof(menu));
pos2->up=pos1->child_end;
pos2->down=pos1;
pos1->child_end->down=pos2;
pos1->child_end=pos2;
pos2->child_end=(menu*)myFunc5;
pos2->child_head=(menu*)myFunc5;
strcpy(pos2->name,name_podmenu2);

pos2=(menu*)malloc(sizeof(menu));
pos2->up=pos1->child_end;
pos2->down=pos1;
pos1->child_end->down=pos2;
pos1->child_end=pos2;
pos2->child_end=(menu*)Arduino12;
pos2->child_head=(menu*)Arduino12;
strcpy(pos2->name,name_podmenu3);
}

int summ3(int a,int b){
int c;
c=a+b;
return c;
}

int summ4(int a,int b){
int c;
c=a+b;
return c;
}

int summ5(int a,int b){
int c;
c=a+b;
return c;
}

void Arduino(){
hj=hj+1;
}

И дело не в setup и loop.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну вот разобрался. ты почаще читай новые темы на форуме. сам поймешь почему тебе так ответили

Maximus
Offline
Зарегистрирован: 24.07.2015

Ответить нечего, вот и ответили.