Página 1 de 1

Estrutura do arquivo header gcc

MensagemEnviado: 16 Mai 2015 07:34
por longo.251272
Bom dia pessoal,

Estou começando a trabalhar com c para ARM e estou um pouco perdido em relação ao que colocar no arquivo header .h e o que colocar no arquivo .c.
Andei transferindo alguns exemplos feitos em keil para o CoIde usando o GCC mas estou me perdendo ao tentar organizar o arquivo header. Alguém pode me indicar algum tutorial sobre a estrutura e do que colocar no arquivo .h e no arquivo .c.

Obrigadão
Ricardo

Re: Estrutura do arquivo header gcc

MensagemEnviado: 16 Mai 2015 16:33
por andre_luis
De um modo geral, no header pode ser colocad aquilo que poderá ser usado por outras funções, como declaração de constantes, macros, etc...

Re: Estrutura do arquivo header gcc

MensagemEnviado: 18 Mai 2015 08:57
por longo.251272
Valeu Andre

Re: Estrutura do arquivo header gcc

MensagemEnviado: 18 Mai 2015 17:51
por longo.251272
Estou apanhando aqui, estou fazendo assim:
Lib1.c

Código: Selecionar todos
/* Includes ------------------------------------------------------------------*/
#include "Menu.h"
#include "FonteLib.h"

/* Static function ----------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/

/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/*-------------------------------- Functions ---------------------------------*/
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/*******************************************************************************
* Function Name  : Menu_User
* Description    : Set values user
* Input          : None
* Output         : None
* Return         : None
* Attention       : None
*******************************************************************************/
void Menu_User( void )
{

   uint8_t PosCURSOR, TopCURSOR, AuxFAIXA, AuxCONTADOR, RegKEY;

   #define qtd_itens     23
   #define tam_texto    25
   #define qtd_linhas  5

.....

}


Lib1.h
Código: Selecionar todos
#ifndef _Menu_h
   #define   _Menu_h


   /* Includes ------------------------------------------------------------------*/
   #include "math.h"
   #include "stm32f4xx.h"
   #include "stm32f4xx_rcc.h"
   #include "stm32f4xx_fsmc.h"
   #include "stm32f4xx_gpio.h"

   #include "KEY&LED/KEY&LED.h"
   #include "LCD/LCD.h"
   #include "LCD/FonteLib.h"
   #include "TouchPanel/TouchPanel.h"


   /* Private define ------------------------------------------------------------*/
   #define MENU_Tipo_1

   #ifdef MENU_Tipo_1

      const uint32_t Menu_Item[] =
      {
            0x8DB2,0x8DB2,0x8DB2,0x8DB2,0x8DB2,0x8DB2,0x8DB2,0x8D92,0x8DB2,0x8DB2,0x8D92,0x8D92,0x8D72,0x8D72,0x8DB3,0x95F3,0x9E35,0xA696,0xAEB6,0xAED7,
      };

      const uint32_t Menu_Item_Selected[] =
      {
            0xCD33,0xE657,0xDE57,0xE698,0xDDD6,0xF659,0xEE79,0xEE78,0xDE37,0xE678,0xDE57,0xD616,0xDE37,0xE658,0xDE58,0xD617,0xDE17,0xDE37,0xDE38,0xDE38,
      };

      const uint32_t Menu_Botao_Up[] =
      {
            0x744E,0x742D,0x744E,0x744E,0x6C2D,0x6C2D,0x742E,0x742D,0x742D,0x744D,0x744D,0x744D,0x744D,0x744D,0x744D,0x744D,0x742E,0x742E,0x744E,0x744E,
      };

      const uint32_t Menu_Botao_Down[] =
      {
            0x744D,0x744D,0x744D,0x744D,0x744D,0x744D,0x744D,0x744D,0x744D,0x744D,0x744D,0x744D,0x744D,0x744D,0x744D,0x744D,0x744D,0x744D,0x744D,0x744D,
      };

      const uint32_t Menu_Botao_Left[] =
      {
            0x742D,0x742D,0x742D,0x6C2D,0x744D,0x744D,0x6C2D,0x746E,0x6BED,0x744E,0x744E,0x6C0D,0x742D,0x746D,0x6C4D,0x6C6D,0x744E,0x742E,0x742E,0x742E,
      };

      const uint32_t Menu_Botao_Right[] =
      {
            0x742E,0x742E,0x742E,0x742E,0x742E,0x742E,0x742D,0x742D,0x742E,0x742E,0x742D,0x742D,0x742D,0x742D,0x742D,0x744D,0x744E,0x6C2D,0x742D,0x744D,
      };

      const uint32_t Menu_Botao_Out[] =
      {
            0x742E,0x742E,0x742D,0x742D,0x742D,0x742D,0x6C4D,0x6C2D,0x744D,0x744D,0x744E,0x744D,0x6C2D,0x6C2D,0x742E,0x742E,0x742D,0x6C2D,0x744E,0x742D,
      };

      const uint32_t Menu_Botao_Edit[] =
      {
            0x744E,0x744D,0x6C2D,0x744E,0x6C0D,0x742D,0x742E,0x6C0D,0x744E,0x6C0D,0x746E,0x6C2D,0x6C4D,0x748E,0x746D,0x6C2D,0x6C2D,0x742D,0x742D,0x742D,
      };

      const uint32_t Menu_Value[] =
      {
            0x8CD1,0x94F2,0xA574,0xB5F6,0xB616,0xBE37,0xBE37,0xBE37,0xBDF7,0xBE17,0xBE17,0xBDF7,0xBE17,0xBE17,0xBDF7,0xBE17,0xBE17,0xBE17,0xBE17,0xBE17,
      };

      const uint32_t Menu_Previous[] =
      {

      };

      const uint32_t Menu_Next[] =
      {

      };

      const uint32_t Menu_Edit[] =
      {

      };

      const uint32_t Menu_Exit[] =
      {

      };

   #endif


   /* Public variables ---------------------------------------------------------*/


   /* Public function ----------------------------------------------------------*/
   void Menu_User( void );


#endif


/*********************************************************************************************************
      END FILE
*********************************************************************************************************/




O compilador da erro de redifinição e outros, agora se junto tudo no arquivo .h, excluindo o .c compilar normal. Muito estranho isso porque algumas bibliotecas estão divididas em .c e .h e ele entende normalmente. Não sei onde estou errando.

Re: Estrutura do arquivo header gcc

MensagemEnviado: 20 Jun 2015 11:02
por RobL
Não use underscore a frente do nome do arquivo no guard include. Underscore na frente do nome é usado internamente em implementações do C. Pode dar erros.
Em vez de :

Código: Selecionar todos
#ifndef _Menu_h
#define _Menu_h
//sem o lead undescore. Usar com letras maiúsculas

#ifndef   MENU_H  // note maiúsculo
#define   MENU_H

Re: Estrutura do arquivo header gcc

MensagemEnviado: 20 Jun 2015 13:28
por barboza
longo.251272 escreveu:O compilador da erro de redifinição e outros, agora se junto tudo no arquivo .h, excluindo o .c compilar normal. Muito estranho isso porque algumas bibliotecas estão divididas em .c e .h e ele entende normalmente. Não sei onde estou errando.


Defina as constantes " const uint32_t Menu_??????" dentro do arquivo .c

ou se realmente precisar no .h, é preciso criar um artificio com define e #ifdef.