This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

struct problem / usart

I'm working with the RealView Compiler and have a strange problem with the usart.

I've installed one typedef struct in a headerfile - when I try to install a array of this struct in the c-file (as global struct variable) - I'm not able to get some printf() messages over the usart (no data abort or anything else (the program seems to work) - only no messages over the usart..

When I install the array of this struct in a function within this c-file (not global) - everything works ok...

Could there be a problem with less stack size?

tobi

  • at the moment I have one headerfile where all other headerfiles where included - so in every c-file I only include this headerfile...

    If I use in one of this heatherfiles to define my struct -> then I have to use extern to define a variable, haven't I? So that could be the reason for my strange errors?

    header.h
    
    #include header1.h
    #include header2.h
    
    header1.h
    
    typedef struct {...}STRUCT_VAR;
    extern STRUCT_VAR struct_array[];
    
    header1.c
    
    #include <header.h>
    STRUCT_VAR struct_array[NBR_STRUCT];
    

    BTW, is this a common way? Or is it better to have in every c-file all #include <header.h> which are needed in the specific c-file?

  • yes you are totally right.... but could you explain me how I have to organize all c-files, using nearly the same headerfiles?

    e.g. there's a lib-headerfile from Keil, which I used in every c-file to get access to registers with inline functions...

    Is it a better way to include this headerfile in every c-file or is it much better to have one headerfile which includes all other headerfiles?

    best regards
    tobi

  • If the compiler is fast in comparison to the project size, and you want to be lazy, you might add most of your includes into a "global" header file and include from all other source files.

    If the compiler supports precompiled headers, then it is normally an advantage to make user of a global master header file.

    Anything that shouldn't be generaly visible may then be put into the single source file that uses them, or a specific header file that is only included for the set of source files that are allowed to know this extra information.