diff options
author | Michael Hope <michael.hope@linaro.org> | 2010-09-29 20:45:57 +1300 |
---|---|---|
committer | Michael Hope <michael.hope@linaro.org> | 2010-09-29 20:45:57 +1300 |
commit | 6fcd4cd306dbecf56f5b0b506a3c23762d1219fa (patch) | |
tree | 467125eca5a2e6706001cad8e09bc475e58a12d9 /notes | |
parent | 368e4fc1662c2594b2a0908900713a2555a3ed8e (diff) | |
parent | adde11b099ff5dad176e410279d21feac39d2c7e (diff) | |
download | librambutan-6fcd4cd306dbecf56f5b0b506a3c23762d1219fa.tar.gz librambutan-6fcd4cd306dbecf56f5b0b506a3c23762d1219fa.zip |
Merge remote branch 'upstream/master'
Diffstat (limited to 'notes')
-rw-r--r-- | notes/coding_standard.txt | 164 | ||||
-rw-r--r-- | notes/fsmc.txt | 17 |
2 files changed, 173 insertions, 8 deletions
diff --git a/notes/coding_standard.txt b/notes/coding_standard.txt new file mode 100644 index 0000000..bab1e38 --- /dev/null +++ b/notes/coding_standard.txt @@ -0,0 +1,164 @@ +Source code standards for libmaple. + +Do it like this unless there's a really good reason why not. You +being a lazy bastard doesn't count as a good reason. + +The file .dir-locals.el in the libmaple root directory already ensures +that many of these standards are followed by default, if you use emacs +(and not Windows, where it would need to be named _dir_locals.el, and +no way, man). There's also some elisp scattered about this file which +will provide you additional help. + +Vim customizations to do the same thing would be nice! + +License +------- + +- Put an MIT license at the beginning of the file (look at any of our + source files for an example). Copyright should go to either your or + LeafLabs LLC. + + Emacs: if you don't like seeing the license, you should use + elide-head (which will hide it for you). Here is some elisp you can + modify to make this pleasant: + + (require 'elide-head) + (setq programming-mode-hooks '(c-mode-hook c++-mode-hook)) + (add-to-list 'elide-head-headers-to-hide + '("The MIT License" . "DEALINGS IN\n [*] THE SOFTWARE")) + (add-to-list 'elide-head-headers-to-hide + '("The MIT License" . "DEALINGS IN THE\n...SOFTWARE")) + (dolist (hook mbolivar-programming-mode-hooks) + (add-hook hook (lambda () (elide-head)))) + +Whitespace +---------- + +- 4 space indents. [Set in .dir-locals.el] + +- Unix newlines. + +- No tab characters. [Set in .dir-locals.el] + +- No trailing whitespace. For help getting this (and no tab + characters) done automatically in Emacs, you can use this: + + http://github.com/mbolivar/code-fascism + + I hear tell you can get something similar in vim; ask Perry, I + guess. + +- Files end in exactly one newline. [The presence of a newline at EOF + is already done by `c-require-final-newline' in recent versions of + emacs.] + +- Exactly two newlines separate source paragraphs. + +- The first line in a function is non-blank. + +Comments +-------- + +- Multi-line comments look like this: + + /* text starts here + * continued lines have a '*' before them + * the comment can end after the last line + */ + + or this: + + /* comment starts here + * the comment can end on the same line */ + +- Doxygen comments are newline comments that begin with /** instead. + +- Single-line comments on the same line are // in c or c++. + +- Single-line comments on their own source line are /* */ in c, but + can also be // in c++. If you think that typing out /* */ is too + slow in emacs, use M-; (comment-dwim) when you're on an empty line, + and it'll ... well... + + You should be using the (super awesome) comment-dwim; it pretty + much does exactly what you want to the comment on the current + line, including "create one and put it in the right place". + +Braces +------ + +- 1TBS. Nothing more need be said. + + http://en.wikipedia.org/wiki/Indent_style#Variant:_1TBS + +Naming conventions +------------------ + +So there's always a fight about upper and lower case vs. underscores. +We'll handle this as follows. First, Dammit_Dont_Mix_Like_This, +because It_Looks_Really_Ugly, ok? + +- Variables: Use underscores to separate words in C identifiers: + + int some_example_name; + + It is strongly advised to do it this way in C++ too, but it's not + [yet] mandatory. + +- Classes: Pascal case. So ThisIsAClassName, but thisIsNot, + this_is_not, and like I said, Dont_You_DareTryANYTHING_STUPID. + +- Functions: C functions are all lowercase, and words are separated by + underscores. C++ method names are camel cased. + +- Structs: pick a style from "Variables" or "Classes" depending on how + you mean it (since it might be either a simple record type, in which + case do like c variables, or you might be faking an object in c, in + which case do like classes). If it's in a typedef, should also + probably put _t at the end, but maybe you won't, and I don't really + feel too strongly about it. + +- Acronyms: The case of letters in an acronym is determined by the + case of the first letter in the acronym. Examples: + + void usb_func() { ... } + + class SomethingUSB { + void usbInit(); + void initUSB(); + }; + + NEVER DO THIS: + + class BadUsb { ... }; // say "GoodUSB" instead + +- Macros and constants: all caps, separated by underscores. + +- foo.h gets ifdef'ed to _FOO_H_. + +Documentation +------------- + +- Document your code, bitches! + +- At least put a doxygen comment with a nonempty @brief for every + source file you add. See the existing ones for examples. + +General Formatting +------------------ + +- Keep it 80-column clean. That means Emacs says the largest column + number=79. If you haven't already, you should turn on column + numbers to help you out: + + (column-number-mode 1) + + You can get more help from lineker-mode. Download it here: + + http://www.helsinki.fi/~sjpaavol/programs/lineker.el + + Then put the file somewhere in your load-path, and + + (require 'lineker) + (dolist (hook programming-mode-hooks) + (add-hook hook (lambda () (lineker-mode 1)))) diff --git a/notes/fsmc.txt b/notes/fsmc.txt index b41de60..1f70760 100644 --- a/notes/fsmc.txt +++ b/notes/fsmc.txt @@ -15,14 +15,15 @@ SRAM chip details t_aa (address access) = 55ns -The FSMC nomenclature is very confusing. There are three seperate "banks" -(which I will call "peripheral banks") each of specialized for different types -of external memory (NOR flash, NAND flash, SRAM, etc). We use the one for -"PSRAM" with our SRAM chip; it's bank #1. The SRAM peripheral bank is further -split into 4 "banks" (which I will call "channels") to support multiple -external devices with chip select pins. I think what's going on is that there -are 4 hardware peripherals and many sections of RAM; the docs are confusing -about what's a "block of memeory" and what's an "FSMC block". +The FSMC nomenclature is very confusing. There are three separate +"banks" (which I will call "peripheral banks") each specialized for +different types of external memory (NOR flash, NAND flash, SRAM, +etc). We use the one for "PSRAM" with our SRAM chip; it's bank #1. The +SRAM peripheral bank is further split into 4 "banks" (which I will +call "channels") to support multiple external devices with chip select +pins. I think what's going on is that there are 4 hardware peripherals +and many sections of RAM; the docs are confusing about what's a "block +of memeory" and what's an "FSMC block". Anyways, this all takes place on the AHB memory bus. |