eCos Product
RedBoot Product
Supported Hardware |
![]() HAL Coding ConventionsTo get changes and larger submissions included into the eCos source repository, we ask that you adhere to a set of coding conventions. The conventions are defined as an attempt to make a consistent tree. Consistency makes it easier for people to read, understand and maintain the code, which is important when many people work on the same project. The below is only a brief, and probably incomplete, summary of the rules. Please look through files in the area where you are making changes to get a feel for any additional conventions. Also feel free to ask on the list if you have specific questions. Implementation issuesThere are a few implementation issues that should be kept in mind:
Source code details
;;================================================================= ;; eCos C/C++ mode Setup. ;; ;; bsd mode: indent = 4, &c &c ;; tail comments are at col 40. ;; uses spaces not tabs in C (defun ecos-c-mode () "C mode with adjusted defaults for use with the eCos sources." (interactive) (c++-mode) (c-set-style "bsd") (setq comment-column 40) (setq indent-tabs-mode nil) (show-paren-mode 1) (setq c-basic-offset 4) (set-variable 'add-log-full-name "Your Name") (set-variable 'add-log-mailing-address "Your email address")) (defun ecos-asm-mode () "ASM mode with adjusted defaults for use with the eCos sources." (interactive) (setq comment-column 40) (setq indent-tabs-mode nil) (asm-mode) (setq c-basic-offset 4) (set-variable 'add-log-full-name "Your Name") (set-variable 'add-log-mailing-address "Your email address")) (setq auto-mode-alist (append '(("/local/ecc/.*\\.C$" . ecos-c-mode) ("/local/ecc/.*\\.cc$" . ecos-c-mode) ("/local/ecc/.*\\.cpp$" . ecos-c-mode) ("/local/ecc/.*\\.inl$" . ecos-c-mode) ("/local/ecc/.*\\.c$" . ecos-c-mode) ("/local/ecc/.*\\.h$" . ecos-c-mode) ("/local/ecc/.*\\.S$" . ecos-asm-mode) ("/local/ecc/.*\\.inc$" . ecos-asm-mode) ("/local/ecc/.*\\.cdl$" . tcl-mode) ) auto-mode-alist)) Nested HeadersIn order to allow platforms to define all necessary details, while still maintaining the ability to share code between common platforms, all HAL headers are included in a nested fashion. The architecture header (usually hal_XXX.h) includes the variant equivalent of the header (var_XXX.h) which in turn includes the platform equivalent of the header (plf_XXX.h). All definitions that may need to be overridden by a platform are then only conditionally defined, depending on whether a lower layer has already made the definition: hal_intr.h: #include <var_intr.h> #ifdef MACRO_DEFINED # define MACRO ... # define MACRO_DEFINED #endif var_intr.h: #include <plf_intr.h> #ifdef MACRO_DEFINED # define MACRO ... # define MACRO_DEFINED #endif plf_intr.h: # define MACRO ... # define MACRO_DEFINED This means a platform can opt to rely on the variant or architecture implementation of a feature, or implement it itself. |