Estrutura do arquivo header gcc

Programação C em geral

Moderadores: 51, guest2003

Estrutura do arquivo header gcc

Mensagempor longo.251272 » 16 Mai 2015 07:34

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
longo.251272
Byte
 
Mensagens: 318
Registrado em: 08 Nov 2011 11:58
Localização: São Paulo - SP

Re: Estrutura do arquivo header gcc

Mensagempor andre_luis » 16 Mai 2015 16:33

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...
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Estrutura do arquivo header gcc

Mensagempor longo.251272 » 18 Mai 2015 08:57

Valeu Andre
longo.251272
Byte
 
Mensagens: 318
Registrado em: 08 Nov 2011 11:58
Localização: São Paulo - SP

Re: Estrutura do arquivo header gcc

Mensagempor longo.251272 » 18 Mai 2015 17:51

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.
longo.251272
Byte
 
Mensagens: 318
Registrado em: 08 Nov 2011 11:58
Localização: São Paulo - SP

Re: Estrutura do arquivo header gcc

Mensagempor RobL » 20 Jun 2015 11:02

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
RobL
Dword
 
Mensagens: 1546
Registrado em: 20 Fev 2007 17:56

Re: Estrutura do arquivo header gcc

Mensagempor barboza » 20 Jun 2015 13:28

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.
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar


Voltar para Visual C++/C/C++/C#

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x