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

method to avoid global variables

I want to know method, How to avoid global variable in c microcontroller programing? or method to make global variable invisible.
Is there any perticular functions in built in c library?, that could be supportive to avoid global variables or hide global variables.

Parents
  • Global variables are a perfectly valid way to communicate results from one part of the application to another. Presumably, what you want to do limit the scope of such variables so that they CANNOT be accessed by parts of the application that have no business accessing them.

    I hope that you already have source code that is divided into modules and perhaps you have subsystems within the application that comprise a number of modules - these mutually communicate, but these interfaces should be hidder from other subsystems.

    Now, for each subsystem you need to have variables that can only be accessed by modules withing the subsystem. To do this create files such as:

        subsystem_name_data.c
        subsystem_name_data.h
    
    Put all your subsystem common variables in these files. Modules that are a part of the subsystem should include the xxx_data.h file. You will need to enforce a rule to the effect that modules outside the subsystem may not include xxx_data.h.

    Each subsystem will require an interface to other subsystems within the application. To do this create files such as:
        subsystem_name_api.c
        subsystem_name_api.h
    
    Put your accessible variables and function names in these files. You will need to enforce the rule that only modules in subsystems that have business communicating with this subsystem are allowed to include the xxx_api.h file.

    Finally, you might need to have things that are actually globally defined. To do this, create files such as:
        system_name_data.c
        system_name_data.h
    
    Put your handful of global definitions in these files. Any module that requires the global defintions can include the xxx_data.h file.

    Futher refinements are possible, such as sub-subsystems, but this should give you a good start.

    There is no way to automatically enforce the include rules - you will have to check manually.

Reply
  • Global variables are a perfectly valid way to communicate results from one part of the application to another. Presumably, what you want to do limit the scope of such variables so that they CANNOT be accessed by parts of the application that have no business accessing them.

    I hope that you already have source code that is divided into modules and perhaps you have subsystems within the application that comprise a number of modules - these mutually communicate, but these interfaces should be hidder from other subsystems.

    Now, for each subsystem you need to have variables that can only be accessed by modules withing the subsystem. To do this create files such as:

        subsystem_name_data.c
        subsystem_name_data.h
    
    Put all your subsystem common variables in these files. Modules that are a part of the subsystem should include the xxx_data.h file. You will need to enforce a rule to the effect that modules outside the subsystem may not include xxx_data.h.

    Each subsystem will require an interface to other subsystems within the application. To do this create files such as:
        subsystem_name_api.c
        subsystem_name_api.h
    
    Put your accessible variables and function names in these files. You will need to enforce the rule that only modules in subsystems that have business communicating with this subsystem are allowed to include the xxx_api.h file.

    Finally, you might need to have things that are actually globally defined. To do this, create files such as:
        system_name_data.c
        system_name_data.h
    
    Put your handful of global definitions in these files. Any module that requires the global defintions can include the xxx_data.h file.

    Futher refinements are possible, such as sub-subsystems, but this should give you a good start.

    There is no way to automatically enforce the include rules - you will have to check manually.

Children
No data