Autor Tema: Ayuda mikroC warnings y error "implicit conversion of pointer to integer error"  (Leído 2168 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado josemabcn

  • PIC10
  • *
  • Mensajes: 2
Hola a todos,

En el siguiente código que encontré al compilar en mikroC me da errores y no consigo encontrarlos:

Código: [Seleccionar]
struct menuStruct;
void mainScreen();
void item2Handle();

//Font for the arrows
const unsigned short Arrows5x6[] = {
        0x30, 0x3C, 0x3F, 0x3C, 0x30,
        0x03, 0x0F, 0x3F, 0x0F, 0x03
        };

//Menu item structure
typedef struct menuItem
               {
                char *itemName;                 //Name of this item
                void (*handler)(void);          //Pointer to function, null if not used
                struct menuStruct *subMenu;     //Pointer to sub menu, null if not used
               } menuItem;

//Menu structure
typedef struct menuStruct
               {
                char *menuName;                 //Name of menu
                unsigned short numberItems;     //Number of menu items
                menuItem *items;                //Pointer to array of items
               } menuStruct;

//Demo menu. Menus are declared in reverse order,
menuItem subItem1ItemList[] = {{"Sub Sub Item 1", 0, 0}, {"Sub Sub Item 2", 0, 0}};

menuStruct subItem1Menu = {"Sub Item 1 Sub Menu", 2, &subItem1ItemList};

menuItem item1ItemList[] = {{"Sub sub menu 1", 0, &subItem1Menu}, {"Sub Item 2", 0, 0}};

menuStruct item1Menu = {"Item 1 Sub Menu", 2, &item1ItemList};

menuItem mainMenuItemList[] = {{"Sub Menu 1", 0, &item1Menu},{"Demo function", &item2Handle, 0},{"Sub sub menu 1", 0, &subItem1Menu},{"Item 4", 0, 0},{"Item 5", 0, 0},
                               {"Item 6", 0, 0},{"Item 7", 0, 0},{"Item 8", 0, 0},{"Item 9", 0, 0},{"Item 10", 0, 0}};

menuStruct mainMenu = {"Main Menu", 10, &mainMenuItemList};

//Demo item handle function
void item2Handle()
{
 GLCD_Fill(0x00);
 GLCD_Write_Text("Press RA4", 0, 0, 1);

 while(!Button(&PORTA, 4, 5, 1))
 {
 }
 return;
}

//Draws the actual menu
void drawMenu(menuStruct *menuToShow, short selectedIndex)
{
 unsigned short i;

 GLCD_Fill(0x00);
 GLCD_Set_Font(FontSystem5x8,5,8,32);
 GLCD_Write_Text(menuToShow->menuName, 0, 0, 1);

 for(i=0;i < (menuToShow->numberItems > 6 ? 6 : menuToShow->numberItems) ;i++)
 {
  if (i > 5 + (selectedIndex > 5 ? selectedIndex - 5 : 0))
  {
   break;
  }
  else if (selectedIndex < 6)
  {
   GLCD_Write_Text(menuToShow->items[i]->itemName, 5, i+1, (selectedIndex == i) ? 0 : 1);
  }
  else
  {
   GLCD_Write_Text(menuToShow->items[i+(selectedIndex-5)]->itemName, 5, i+1, (selectedIndex == i+(selectedIndex-5)) ? 0 : 1);
  }
 }

 Glcd_H_Line(0,127,7,1);
 Glcd_H_Line(0,127,55,1);
 GLCD_Set_Font(Arrows5x6,5,6,30);
 GLCD_Write_Char(30, 5, 7, 1);
 GLCD_Write_Char(31, 25, 7, 1);
 GLCD_Set_Font(FontSystem5x8,5,8,32);
 GLCD_Write_Text("Select", 45, 7, 1);
 GLCD_Write_Text("Back", 101, 7, 1);
 return;
}

//Main menu function
void openMenu(menuStruct *menuToShow)
{
 short selectedIndex = 0;               //Current selected item

 delay_ms(50);
 drawMenu(menuToShow, selectedIndex);

   do {
     if (Button(&PORTA, 0, 5, 1))
     {
        selectedIndex--;
        if (selectedIndex < 0)
        {
           selectedIndex = menuToShow->numberItems - 1;
        }
        drawMenu(menuToShow, selectedIndex);
     }
     else if (Button(&PORTA, 1, 5, 1))
     {
        selectedIndex++;
        if (selectedIndex > (menuToShow->numberItems) - 1)
        {
           selectedIndex = 0;
        }
        drawMenu(menuToShow, selectedIndex);
     }
     else if (Button(&PORTA, 2, 5, 1))
     {
         if (menuToShow->items[selectedIndex]->handler != 0)
         {
          menuToShow->items[selectedIndex]->handler();
         }
         else if (menuToShow->items[selectedIndex]->subMenu != 0)
         {
          openMenu(menuToShow->items[selectedIndex]->subMenu);
         }
         drawMenu(menuToShow, selectedIndex);
     }
     else if (Button(&PORTA, 3, 5, 1))
     {
          return;
     }

     delay_ms(30);
  } while (1);

 return;
}

void mainScreen()
{
 GLCD_Fill(0x00);
 GLCD_Set_Font(FontSystem5x8,5,8,32);
 GLCD_Write_Text("Menu", 0, 7, 1);
 return;
}

void main()
{
  ADPCFG = 0xFFFF;

  Glcd_Init_LV_24_33();
  mainScreen();

  //--- main loop
  do
  {
    if (Button(&PORTA, 0, 1, 1))
    {
     openMenu(&mainMenu);
     mainScreen();
    }
    Delay_ms(50);
  } while (1);
}//~!
El error me lo da en las siguientes lineas:

Código: [Seleccionar]
menuItem subItem1ItemList[] = {{"Sub Sub Item 1", 0, 0}, {"Sub Sub Item 2", 0, 0}};
menuItem item1ItemList[] = {{"Sub sub menu 1", 0, &subItem1Menu}, {"Sub Item 2", 0, 0}};
menuItem mainMenuItemList[] = {{"Sub Menu 1", 0, &item1Menu},{"Demo function", &item2Handle, 0},{"Sub sub menu 1", 0, &subItem1Menu},{"Item 4", 0, 0},{"Item 5", 0, 0},{"Item 6", 0, 0},{"Item 7", 0, 0},{"Item 8", 0, 0},{"Item 9", 0, 0},{"Item 10", 0, 0}};


Algun idea?.

Jose