New Initialization Scheme for SICS
The idea behind this scheme is, to have to edit only
one list when adding a new feature. The aim is not
to make the source code shorter. In fact, the initialization
code is just moved from a central place to the modules.
The main goal is to have a better structure of the code,
which should be easier to maintain, and less error-prone.
Let us look at the difference when adding a command or driver.
Before using this scheme, there were many different places in
psi/psi.c where modifications had to be added:
when adding a new command:
- prototype declaration of the command function or include
statement
- inserting the command to the AddPsiCommands function
- if it is a startup command, inserting the command to
the RemovePsiCommands function
when adding a new driver:
- prototype declaration of the driver creation function or
include statement
- adding an "else if" clause to the CreatePsiXXX function
- in the case of an environment driver, also add an "else if"
clause to the ConfigureController function.
With the new scheme, for a module one has one init function,
with prototype "void (void)" placed in the source file of the module.
In this function, you call AddCmd, AddIniCmd or AddCommand(SCinter.h) to
insert a standalone command, startup command or an object command. To
create a new driver, use either the MakeDriver function, if you want
to use the MakeObject command to create the driver, or the functions
MakeInitializer/GetInitializer, if you want to do use an other
factory command (see initializer.h).
The init function has to be added to the system by inserting one line
to the SiteInit (psi.c) or InitGeneral (ofac.c) function.
Suggestion by Markus Zolliker
At present, only the new stuff I inserted uses this scheme. I propose
to move to the new scheme during next shutdown.
ofac.c:
- remove InitIniCommands (moving first few lines InitObjectCommands)
and RemoveIniCommands
- move InitGeneral to a new file named inigen.c
- Create init functions for all modules defining commands, and add
calls to the InitGeneral function
psi.c:
- all stuff (except SiteInit) is moved to the corresponding modules,
using MakeInitializer/GetInitializer
These modifications will not change the behaviour of SICS.
Printer Friendly
Page Info
This page last changed on 13-Sep-2005 14:50:20 UTC by MarkusZolliker.
|