Нужна помощь!
- Войдите на сайт для отправки комментариев
Пт, 24/07/2015 - 10:10
Добрый день товарищи !! Не могу понять в чем причина ошибки.... Короче пишу сейчас меню для жкрана с кнопками. Пока состряпал структуру. Конечный элемент структыры имеет адрес указателя функции.Так вот когда писал его в КОдБлоксе, все работает и шикарно. Как залил код в 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;
}
все функции тут не имеют смысловой нагрузки , просто сделаны чтобы проверить работоспособность .
странная запись
ты вначале фукнции объявляешь? это не надо
41 строка и далее непонятна. что за запись такая
да void setup и loop не увидел
странная запись
ты вначале фукнции объявляешь? это не надо
41 строка и далее непонятна. что за запись такая
да void setup и loop не увидел
писал его в КОдБлоксе, все работает и шикарно.
пойду на туалетной бумаге напишу что нибуть.. а если не заработает то приду за помощью
setup -main, loop- while(1);
После 41 строчки , динамичесеки ыделю паямять под указатель Pos1 , потом присваеваю его элементам структур значения и по такому же принципи создаю pos2. Получается динамическое дерево.
короче хочешь чтобы было как ты хочешь и игнорируешь структуру скетча в ардуино
От этого ничего не изменится. Короче понятно. Мне тут ни кто не поможет
ну и вали раз ничего не изменится)
Отвечу на свой вопрос Сам. Я не правильно работал с указателями на функцию, вот статья на эту тему 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.
ну вот разобрался. ты почаще читай новые темы на форуме. сам поймешь почему тебе так ответили
Ответить нечего, вот и ответили.