funçao q funciona no C18 mas no MIKROC nao

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

funçao q funciona no C18 mas no MIKROC nao

Mensagempor cristian » 13 Dez 2010 08:07

galera estou convertendo um codigo do C18 para o MIKROC esta parte do codigo ai ta dando erro

como podem ver ele declarou uma struct chamada MENU_ITEM e criou array chamada MAIN MENU e SETTINGS MENU e SHOW MORE MENU

no MAIN MENU ele indicou os sub menus como se fosse um item

ok ?

ai fui fazer isso no mikroc e ele da erro na indicaçao

da esse erro
130 319 Cannot cast '' to ''
130 325 Too many initializers

Código: Selecionar todos

/* ------------------------------------------------------------------------ */
/*                    Top level of the application                    */
/* ------------------------------------------------------------------------ */
#pragma code

//
// forward declarations of the sub menus
//
MENU_ITEM SettingsMenu[];
MENU_ITEM ShowMoreMenu[];


//
// the main menu
//
//
// menu table item typedef
//
typedef struct _MENU_ITEM
{   byte MenuItemType;
   rom char *MenuItemText;
   rom char *MenuItemPntr;
} MENU_ITEM;



MENU_ITEM MainMenu[] = {
   {MENU_ITEM_TYPE_MAIN_MENU_HEADER, "Main menu", SelectApplication},
   {MENU_ITEM_TYPE_SUB_MENU, "Show", ShowMoreMenu},
   {MENU_ITEM_TYPE_SUB_MENU, "Settings", SettingsMenu},
   {MENU_ITEM_TYPE_COMMAND, "About", ShowAboutCommand},
   {MENU_ITEM_TYPE_END_OF_MENU, "", 0}};



//
// the Show sub menu
//
MENU_ITEM ShowMoreMenu[] = {
   {MENU_ITEM_TYPE_SUB_MENU_HEADER, "Show", MainMenu},
   {MENU_ITEM_TYPE_COMMAND, "Color bars", ShowColorBarsCommand},
   {MENU_ITEM_TYPE_COMMAND, "Pictures", ShowPicturesCommand},
   {MENU_ITEM_TYPE_COMMAND, "Get number", ShowGetANumberCommand},
   {MENU_ITEM_TYPE_COMMAND, "Line drawing", ShowLineDrawingCommand},
   {MENU_ITEM_TYPE_COMMAND, "Being busy", ShowBeingBusyCommand},
   {MENU_ITEM_TYPE_END_OF_MENU, "", 0}};


//
// the Settings sub menu
//
MEU_ITEM SettingsMenu[] = {
   {MENU_ITEM_TYPE_SUB_MENU_HEADER, "Stopwatch Settings", MainMenu},
   {MENU_ITEM_TYPE_ALTERNATE, "Digits", SetDigitsSizeCallback},
   {MENU_ITEM_TYPE_ALTERNATE, "Tenths", SetShowTenthsFlgCallback},
   {MENU_ITEM_TYPE_COMMAND, "Set contrast", SetContrastCommand},
   {MENU_ITEM_TYPE_COMMAND, "Reset all settings", ResetAllSettingsCommand},
   {MENU_ITEM_TYPE_END_OF_MENU, "", 0}};


/* ------------------------------------------------------------------------ */
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba

Mensagempor ivan » 14 Dez 2010 10:49

cristian escreveu://
// forward declarations of the sub menus
//
MENU_ITEM SettingsMenu[];
MENU_ITEM ShowMoreMenu[];


Estão sendo declaradas variáveis de um user type antes que seja definido o próprio pelo #typedef!

cristian escreveu://
// the Show sub menu
//
MENU_ITEM ShowMoreMenu[] = {
{MENU_ITEM_TYPE_SUB_MENU_HEADER, "Show", MainMenu},
{MENU_ITEM_TYPE_COMMAND, "Color bars", ShowColorBarsCommand},
{MENU_ITEM_TYPE_COMMAND, "Pictures", ShowPicturesCommand},
{MENU_ITEM_TYPE_COMMAND, "Get number", ShowGetANumberCommand},
{MENU_ITEM_TYPE_COMMAND, "Line drawing", ShowLineDrawingCommand},
{MENU_ITEM_TYPE_COMMAND, "Being busy", ShowBeingBusyCommand},
{MENU_ITEM_TYPE_END_OF_MENU, "", 0}};


Com este formato vc está redeclarando e inicializando o que vc fêz no forwad declarations.

É vc preciso escolher:
Ou declarara no forward e depois inicializa, ou declara já incializando como vc fêz mais a frente.
Pra mim, o melhor seria tirar o forward declarations que deve funcionar.
"A mente que se abre a uma nova idéia jamais volta ao seu tamanho original." (Albert Einstein).
Avatar do usuário
ivan
Word
 
Mensagens: 618
Registrado em: 12 Out 2006 21:27

Mensagempor cristian » 14 Dez 2010 11:29

Código: Selecionar todos
void (*pointerToCorrenteEventHandler)(char);
void SetEventHandler(void (*)());
void glcd_text35(char x, char y,unsigned char *textptr, char color);
static void SelectAp(char);
static void SelectAp2(char);
static void SelectAp3(char);


void SetEventHandler(void (*PntrToNewEventHandler)(char))
   {
   pointerToCorrenteEventHandler=PntrToNewEventHandler;
   }

void ExecutEvent(char evento)
 {
  (*pointerToCorrenteEventHandler)(Evento);
 }


typedef struct{
  char *opcao;
  char *opcao2;
}sMenu;

 sMenu Msg[]=
{
  {"CALCULAR" ,SelectAp} ,{"CALCULAR" ,SelectAp2},{"CALCULAR" ,SelectAp3}
};



static void SelectAp(char)
{
glcd_text35(0,0,"CERTO",1);

}
static void SelectAp2(char)
{
glcd_text35(0,20,"CE",1);

}
static void SelectAp3(char)
{
glcd_text35(0,10,"CER",1);

}


void main()
{
void (*CommandPntr)(char);


CommandPntr= (void (*)(char)) Msg[2].opcao2;
 (*CommandPntr)(1);


}




aqui resolveu a primiera parte do problema
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba

Mensagempor cristian » 14 Dez 2010 11:30

vou faz\er o teste IVAN
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba

Mensagempor cristian » 14 Dez 2010 11:38

Código: Selecionar todos
typedef struct
{
        char MenuItemType;
        char *MenuItemText;
        char *MenuItemPntr;
} MENU_ITEM;





 MENU_ITEM SettingsMenu[] = {
        {1, "Stopwatch Settings", SelectAp3},
        {2, "Digits", SelectAp2}

        };

 MENU_ITEM MainMenu[] =
            {
                  {1, "Main menu",SelectAp},
                 {2, "Show", SettingsMenu}

            };


pra simplificar fiz assim ....tirando esta linha nao da erro
Código: Selecionar todos
{2, "Show", SettingsMenu}
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba

Mensagempor cristian » 14 Dez 2010 11:40

acho q no mikroc vai ser impossivel isso

pq eu estou associando um array como elemento de outra array ...


a menos q isso fosse so um ponteiro
cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba

Mensagempor ivan » 14 Dez 2010 16:47

cristian escreveu:...

MENU_ITEM SettingsMenu[] = {
{1, "Stopwatch Settings", SelectAp3},
{2, "Digits", SelectAp2}

};

MENU_ITEM MainMenu[] =
{
{1, "Main menu",SelectAp},
{2, "Show", SettingsMenu}

};


pra simplificar fiz assim ....tirando esta linha nao da erro

{2, "Show", SettingsMenu}


Claro! Nome de variável e de função iguais.
Trabalhar com ponteiros já não é fácil, com ponteiros para função é bem mais difícil.
Ponteiros para função no Mikoc funcionam como em qq compilador C que se preze! Mas vc tem q saber o q está fazendo, senão...
"A mente que se abre a uma nova idéia jamais volta ao seu tamanho original." (Albert Einstein).
Avatar do usuário
ivan
Word
 
Mensagens: 618
Registrado em: 12 Out 2006 21:27

Mensagempor cristian » 14 Dez 2010 17:16

codigo original feito em C18 é assim ....


pelo q entendi o SettingsMenu é um ponteiro pra a
MENU_ITEM SettingsMenu[]



Código: Selecionar todos
 static void SelectAp(char)
{
glcd_text35(0,0,"CERTO",1);

}
static void SelectAp2(char)
{
glcd_text35(0,20,"CE",1);

}



MENU_ITEM SettingsMenu[] = {
{1, "Stopwatch Settings", SelectAp3},//chama a funçao
{2, "Digits", SelectAp2} chama a funçao



//-------------------------------------------------------------
esta linha chama a funçao selectap2


CommandPntr= (void (*)(char)) Msg[1].opcao2;
 (*CommandPntr)(1);


cristian
Word
 
Mensagens: 570
Registrado em: 03 Nov 2006 08:15
Localização: serrinha-ba

Mensagempor ivan » 14 Dez 2010 19:04

Bem, se vc está pretendendo passar um dos itens do menu, vai ser preciso usar dereferência ou, popularmente, "ponteiro para ponteiro"
Código: Selecionar todos
#include <stdio.h>
#include <stdlib.h>

int main(void) {
   char *pronomes[] = {"eu", "tu", "ele", "nos", "vos", "eles"};
   char *ptr, **pPtr;
   pPtr = &ptr;

   for(int i=0;i<6;i++)   {
      ptr = pronomes[i];
      printf("pronome=%s\n", (char*)*pPtr);
   }
   getchar();
   return 0;
}


Mas continuo achando q existe um erro de conceituação, pois os arrays de menu estavam usando nomes de função e não itens de menu.

PS: Usei um outro compilador pq não tenho compilador C pra PIC e nem quero instalar um.
Editado pela última vez por ivan em 15 Dez 2010 13:59, em um total de 1 vez.
"A mente que se abre a uma nova idéia jamais volta ao seu tamanho original." (Albert Einstein).
Avatar do usuário
ivan
Word
 
Mensagens: 618
Registrado em: 12 Out 2006 21:27

Mensagempor tcpipchip » 15 Dez 2010 08:51

Se nao quiser instalar, usa o PORTABLE.
Avatar do usuário
tcpipchip
Dword
 
Mensagens: 6560
Registrado em: 11 Out 2006 22:32
Localização: TCPIPCHIPizinho!


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Google [Bot] e 1 visitante

x