20221212
[devspec.git] / devspec.en_US / 4.0.=prog-style.txt
blobc6fb0767555a083a0bf9fe3fb36d37c1b4ddd771
1 \r
2 \r
3 @ this charpter contains few program sytle doc, and should be extended in other\r
4 docs in build-res.\r
5 \r
6 \r
7 \r
8 # program scale\r
9 ===============\r
11         program level and element conclution:\r
13 @ instruction: asm programming.\r
14 @ lang-feature-element: c/cpp programming.\r
15 @ function-set-element: invoking functions with particular feature.\r
16 @ module-element: using a set of functions for the same feature.\r
17 @ class-element: same as module, but stronger then module on soft-reuse and \r
18   inherit.\r
19 @ lib-pkg-element: function set for some feature, or midware.\r
20 @ prog-element: cmd set.\r
21 @ svc-element: service program.\r
26 # program type\r
27 ==============\r
29 [type-lib-func-module]\r
30 @\r
31 # program£ºexeprog£¬libprog£¬task£¬svc£¬\r
32 # process£ºprocess£¬thread£¬fiber\r
33 # mem£ºshmm£¬slice£¬slb\r
34 # ipc£ºmsg£¬evnt£¬databus£¬rpc\r
36 @ Connector£º\r
37 Connector(Socket£¬Wire)£¬\r
38 Wire(Property/Wire£¬WireGroup£¬Stream£¬Bucket)£¬Wire(Tier/Bind/alias)£¬Stream(Pipe£¬Thr£¬Fiber)£¬(Char£¬LinedTxt£¬Frame£¬proc)£¬\r
39 Buffer(Normal£¬Frame£¬Slab)\r
40 # Bucket(dynamic-struct)\r
41 @ ui\r
42 # gui/tui/wui£¬¸÷ÖÖctlrµÄ¶¨Òå¡¢±à¼­ºÍ²âÊÔ·½·¨\r
43 # cli£¬feature-list£¬arg-list£¬²ÎÊý²âÊÔ\r
44 @ ipc & comm proto & file-format\r
45 # format(hexfmt)\r
46 # proto(hw-comm£¬pipe£¬sock)(hexfmt)£¬\r
47 # msg/evnt/databus£¬\r
48 @ db\r
49 #\r
50 @ io-dev\r
51 # libusb\r
52 # btn-key£¬key£¬\r
53 # io-value£ºio-signal£¬io-analog£¬io-bus£¬io-pwm(f/d)£¬io-clk(c/f/l)£¬\r
54 # motor(s/p/c)£¬sensor(p/c)\r
55 # timer£¬tick£¬time£¬date£¬tp£¬timetp£¬\r
56 # ad/daÒÔaudio»òvideoµÄdrvʹÓã¬Êý¾Ý´¦ÀíµÄ³ÌÐòÒ²ÒÔaudio»òvideoµÄ³ÌÐò½á¹¹½øÐбàд£¬¿ÉʹÓÃaudio/video±à¼­Èí¼þ¶ÔÊý¾Ý½øÐб༭¡£\r
58     the feature of the program is disscused in other doc, and would not be \r
59 disscused here.\r
63 # codelib\r
64 =========\r
66  # ref-copy & lib-link\r
67  # general-dep-interface\r
68  + basical-module(stdio£¬file-ops£¬string£¬mem-ops)\r
69  + opt-module(thread£¬fiber£¬ipc)\r
70  + cplr-feature(TLS£¬weak£¬alias£¬)¡£aliasÓÃÓÚgnuºÍmfcÁ½ÖÖ·ç¸ñµÄ½Ó¿Úº¯ÊýµÄ¼æÈÝ£¬ÔÚ±àÒëÆ÷ÉÏÐèÒªÔÚÁ´½Óʱ½«importµÄº¯ÊýÃû½øÐÐת»»¡£\r
71  # scrope£¬ÓÃÓÚÐèÒªÏà¶Ô¸´Ôӵģ¬Ö»Óë±à³ÌÓïÑÔÏà¹ØµÄ¹¦ÄÜ¡£ÓÃÓÚ£ºµ¥Æ¬»úϵͳ£¬sys-low-leval´úÂ룬Çý¶¯¼°ÏµÍ³»ù´¡Èí¼þ°ü£¬ÒÔ¼°Ó¦ÓóÌÐòÖÐÉÙ²¿·Ö²Ù×÷ϵͳ¹¦ÄÜÎ޹أ¬±à³ÌÓïÑÔ¼°³ÌÐòÉè¼ÆÄ£ÐÍÏà¹ØµÄ´úÂë¡£\r
72  # Ò»¸öÄ£¿é°üº¬£º.cºÍ.hÔ´Îļþ£¬.mdlÄ£¿é»¯½Ó¿ÚÉè¼ÆÎļþ£¬.config¹¦ÄÜÅäÖÃÎļþ£¬build±àÒë²ÎÊýĿ¼£¬.recÉè¼ÆÎĵµ£¬.md»ù±¾µÄ˵Ã÷Îĵµ£¬manual.mdʹÓÃÊÖ²áÎļþ£¬_test.c, _test.sh, .stdio, .time, .timecost£¬µÈ²âÊÔÎļþ¡£¸ù¾Ý²»Í¬µÄ´úÂëʵÏÖ£¬Ò»Ð©Îļþ¿ÉÉìËõ¡£\r
73      Ò»Ð©Èí¼þ°üµÄͨÓÃÎļþ£¬ÏñLISENCE£¬AUTHORµÈ£¬Í¨³£Ê¹ÓÃÈí¼þ°üͨÓõġ£¶ÔÓÚchangelog£¬news£¬¿ÉÔÚÄ£¿éÖÐʹÓã¬Ò²¿ÉÔÚÈí¼þ°üÖÐʹÓá£\r
74      mdlÎļþºÍ.hÎļþ£¬ÓÃÓÚÆä±¾Éí¹¦ÄÜÖ®Í⣬°üº¬interface¹¦ÄÜ¡£¶ÔÓÚc³ÌÐòÄ£¿é£¬Êä³ömacro£¬type£¬var£¬func¡£\r
75  # codelib¶Ôsrc-module½øÐй¤³Ì»¯µÄorg£¬Ä£¿é¼äµÄdep£¬ÒÔ¼°¹¦ÄÜ·ÖÀ࣬¶Ô²»Í¬cpu£¬²Ù×÷ϵͳ£¬±àÒëÆ÷µÈÔËÐл·¾³µÄadepter¡£\r
76      ¹¦ÄÜ·ÖÀàÒÔÒ»¸öcatalogÎļþÃèÊö£¬»òÒÔĿ¼Á´½ÓÎļþµÄĿ¼½á¹¹ÃèÊö¡£\r
77  # codelibµÄ¹¦ÄÜÄ£¿éÔ´×ÔÓÚÒÑÓÐÈí¼þ°üÖУ¬Ò»Ð©Ö»Óë±à³ÌÓïÑÔÏà¹ØfeatureµÄ³éÏóºÍÄ£¿é»¯¡£ÒÔ¼°³ÌÐòÉè¼ÆÖеÄidea£¬Êµ¼ÊÎÊÌâµÄ´¦Àí·½·¨µÈ¡£\r
80 @ codelib£¬¶à¸ö¹¦ÄÜÄ£¿é×éºÏ³ÉÒ»¸ölib£¬²¢ÒÔ±àÒ룬»òrefµÄÐÎʽ£¬Ê¹ÓÃlib¡£libÖеŦÄÜÄ£¿éΪpure-lang-feature£¬ÔÚstdioÓëmem-allocµÈ¹¦ÄÜÖ®Í⣬¼¸ºõ²»Ê¹ÓÃÍⲿ½Ó¿Úº¯Êý¡£\r
81  # codelibÖеÄÿ¸öÄ£¿é¶¼ÊÇÏà¶ÔÈõñîºÏÐԵġ£\r
82  # codelibµÄ´úÂë°üº¬Á½ÖÖʹÓ÷½·¨£¬copyʹÓúͱàÒëʹÓá£copyʹÓÃʱ£¬¸ù¾ÝhdrµÄinclude±íʾµÄdep£¬½«ÆäËüÄ£¿éһͬcopyÊä³öµ½Êä³öĿ¼¡£\r
83  # ÆäËü³ÌÐòʹÓÃʱ£¬Ò²¿É¸ù¾ÝÔËÐл·¾³£¬ÒÔcopy´úÂë»ò¶þ½øÖÆlibÁ´½ÓÁ½ÖÖÀàÐÍ¡£Õâ¶ÔÓÚ¼õÉÙ´úÂëÈßÓà¶È£¬Í¬Ê±¼æ¹ËÈõñîºÏÐԱȽϺÃһЩ¡£\r
84  eg: Êý¾Ý½á¹¹µÄ´úÂëÊÇͨÓôúÂ룬µ«ºÜ¶à³ÌÐòÖж¼°üº¬Ò»Ð©Êý¾Ý½á¹¹µÄ´úÂë¡£¶à¸öÈí¼þ°üÖУ¬ÕâЩ´úÂëÊÇÈßÓà¿É¸´Óõġ£\r
85      µ«Èç¹ûÒÔ¶þ½øÖÆlibʹÓã¬Ò»¸ö³ÌÐòÖÐÐèÒª½Ï¶àlibµÄʹÓ㬽µµÍÁËÈõñîºÏÐÔ¡£\r
86      Ê¹ÓÃcodelib£¬¼æ¹ËÁËÄ£¿éµÄÈõñîºÏÐÔ£¬ÒÔcopyʹÓôúÂë¡£³ÌÐòÉè¼ÆµÄÈßÓà¶È½µµÍÁË£¬¶þ½øÖÆ´úÂëµ½ÈßÓà¶È¸ù¾Ýϵͳ»·¾³ÖÐÊÇ·ñ°üº¬codelibµÄ¿âÎļþ£¬Ê¹ÓÃlib½µµÍ¶þ½øÖÆÈßÓà¶È£¬ÇÒcodelibÏñlibcÒ»Ñù³ÉΪһ¸öͨÓÃlib£¬²¢²»Ôö¼Ó³ÌÐòµÄñîºÏÐÔ¡£Èç¹ûcodelibÔÚlibc¿âÖÐÒÔcopyʹÓã¬ÄÇô¶ÔÓÚÓ¦ÓóÌÐòµÄÍⲿ½Ó¿ÚÊDz»±äµÄ£¬Î´Ôö¼Ó³ÌÐòµÄñîºÏÐÔ£¬µ«½µµÍÁ˳ÌÐòÉè¼ÆºÍ´úÂëµ½ÈßÓà¶È¡£ÕâÖÖʹÓ÷½·¨£¬ÔÝÇÒ³Æ֮Ϊcode-piece¡£\r
87      codelibÊDZà³ÌÓïÑÔÏà¹ØµÄ¿â£¬Óë±àÒëÆ÷/cpu/OSÎ޹صÄlib¡£\r
88      µ±codelib¹ã·ºµÄʹÓÃʱ£¬ÏñlibcÒ»Ñù£¬³ÉΪһ¸ö»ù´¡libʱ£¬ÆäËüʹÓÃcodelibµÄ³ÌÐò£¬¸ù¾Ý¿ª·¢»·¾³ÖеÄcodelib¿âÒÔlibʹÓ㬶ø²»ÊÇ´úÂëcopy¡£¶øÕâ¶Ôdeveloper¶øÑÔ£¬Ô­ÓеÄcodelibÖеĺ¯Êý½Ó¿Ú²»±ä£¬×Ô¶¯Çл»³ÉlibʹÓá£\r
89  # »ù´¡¹¦ÄÜÄ£¿éinterface\r
90  stdio£¬fops£¬string£¬mem-ops(alloc£¬copy£¬comp)£¬¼°ÆäÏà¹ØµÄ¹¦ÄÜÄ£¿é£¬Îª»ù´¡¹¦ÄÜÄ£¿é£¬ÒÔÒ»¸öÕûÌ壬ΪÆäËü¿âµÄdepÄ£¿é¡£ÆäËüÄ£¿éͨ³£Ö»ÒÔ±à³ÌÓïÑԺͻù´¡¹¦ÄÜÄ£¿éΪdep¡£½µµÍÄ£¿éµÄñîºÏÐÔ¡£\r
91      stdioºÍfopsÖ»ÒÔinterfaceÌṩ£¬¸ù¾Ý²»Í¬µÄÔËÐл·¾³£¬Ê¹Óò»Í¬µÄ´úÂëʵÏÖ¡£Õâ¶ÔÓÚ²Ù×÷ϵͳ»·¾³ºÍµ¥Æ¬»ú»·¾³¶¼¼æ¹ËºÍͨÓá£\r
92  eg£º³ÌÐòÖеĶàÓïÑÔ¹¦ÄÜ£¬ÔÚlibcÖÐÓÐʹÓ㬴úÂëµÄʹÓÃÒÀÀµÓÚÎļþ²Ù×÷¡£ÔڷDzÙ×÷ϵͳ»·¾³£¬»òÊÇδʹÓÃÎļþ¹¦ÄܵÄrtosÖУ¬Îļþ¼´¿Éº¯ÊýÒÔÎļþÃûºÍ´æ´¢Æ÷µØÖ·µÄ¹ØÁª±íʵÏÖ´úÂëµ½¼æÈÝ¡£ÕâÑù£¬¶àÓïÑÔ¹¦ÄܵĴúÂëÔÚ²»Ê¹ÓÃÎļþϵͳµÄ³ÌÐòÖÐÒ²¿ÉʹÓá£\r
93      ÕâʹcodelibµÄ´úÂ븴ÓÃÐÔµÃÒÔÌáÉý£¬¸÷ÖÖ³ÌÐòʹÓÃcodelib£¬½µµÍ³ÌÐòÉè¼ÆºÍ¶þ½øÖÆ´úÂëµÄÈßÓà¶È¡£\r
94  # »ù´¡¹¦ÄÜÄ£¿éÖУ¬°üº¬thread£¬fiber£¬ipc£¬ÓÃÓÚ¹¹³É²Ù×÷ϵͳ»ù±¾¹¦ÄÜ¡£\r
95      Ò»Ð©µ¥Æ¬»ú»·¾³²»ÐèÒª¶àÈÎÎñ²¢·¢¹¦ÄÜ£¬ÕâЩ¹¦ÄÜÄ£¿éÅäÖóÉÏà¹ØµÄnull²Ù×÷¡£ÔÚ´úÂë±àÒëʱ£¬²»°üº¬Ïà¹Øº¯ÊýµÄµ÷Óá£Ïà±ÈifdefµÄºê¶¨Ò忪¹Ø£¬´úÂëµ½¿É¶ÁÐÔ¸üºÃ¡£\r