aboutsummaryrefslogtreecommitdiffstats
path: root/notes
diff options
context:
space:
mode:
authorMichael Hope <michael.hope@linaro.org>2010-09-29 20:45:57 +1300
committerMichael Hope <michael.hope@linaro.org>2010-09-29 20:45:57 +1300
commit6fcd4cd306dbecf56f5b0b506a3c23762d1219fa (patch)
tree467125eca5a2e6706001cad8e09bc475e58a12d9 /notes
parent368e4fc1662c2594b2a0908900713a2555a3ed8e (diff)
parentadde11b099ff5dad176e410279d21feac39d2c7e (diff)
downloadlibrambutan-6fcd4cd306dbecf56f5b0b506a3c23762d1219fa.tar.gz
librambutan-6fcd4cd306dbecf56f5b0b506a3c23762d1219fa.zip
Merge remote branch 'upstream/master'
Diffstat (limited to 'notes')
-rw-r--r--notes/coding_standard.txt164
-rw-r--r--notes/fsmc.txt17
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.