色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

嵌入式實時操作系統AliOS Things的編碼風格介紹

工程師進階筆記 ? 來源:阿里云 ? 2023-06-07 09:20 ? 次閱讀

1. 前言

本文是AliOS Things提供的一套C語言代碼規范,適用的對象為符合C99標準的C語言工程。

2. 命名

本節內容均為建議,不作強制要求。

2.1. 總則

各種命名均使用英文單詞及其縮寫,非特殊情況不能使用漢語拼音或其他語言。

2.2. 文件命名

文件名全部使用小寫字母,用_連接。源文件使用.c后綴。頭文件使用.h后綴。

2.3. 類型命名

2.3.1. 簡單類型命名

使用typedef自定義的簡單類型命名全部使用小寫字母,用_連接,以_t結尾。例如:

typedefint32_taos_status_t;

2.3.2. 結構體和聯合體命名

結構體和聯合體類型命名全部使用小寫字母,用_連接。建議使用typedef定義一個整體的名字,以_t結尾。例如:

typedefstructaos_list_node{
structaos_list_node*prev;
structaos_list_node*next;
}aos_list_node_t;

staticaos_list_node_tlist_node;

2.3.3. 枚舉命名

枚舉類型命名全部使用小寫字母,用_連接。建議使用typedef定義一個整體的名字,以_t結尾。枚舉值命名全部使用大寫字母,用_連接,包含表示類型的前綴。例如:

typedefenumaos_socket_stage{
AOS_SOCK_STG_DISCONNECTED,
AOS_SOCK_STG_CONNECTED,
}aos_socket_stage_t;

staticaos_socket_stage_tsock_stage=AOS_SOCK_STG_DISCONNECTED;

2.4. 變量命名

變量命名全部使用小寫字母,用_連接。數組名稱盡量使用復數名詞。例如:

cfg_file_tcfg_files[NUM_CFG_FILES];

表示數目的變量名稱使用num(number的縮寫)加復數名詞。例如:

unsignedintnum_files;

表示序號的變量名稱使用單數名詞加num或index或idx(index的縮寫)。例如:

unsignedintfile_num;
unsignedintfile_index;

2.5. 函數命名

函數命名全部使用小寫字母,用_連接。

2.6. 宏命名

一般的宏命名全部使用大寫字母,用_連接。例如:

#defineAOS_STRING_MAX_LEN127

模擬函數使用方式的宏的命名規則與函數相同。例如:

#defineaos_dev_set_id(dev,x)
do{
(dev)->id=(x);
}while(0)

2.7. 前綴

為防止命名空間污染,公用組件中的非static函數、非static全局變量、全局類型、全局宏的命名應帶有前綴。例如(假設前綴為aos):

voidaos_cfg_file_close(intfd);
externchar**aos_process_argv;
typedefstructaos_list_nodeaos_list_node_t;
#defineAOS_STRING_MAX_LEN127

3. 格式

3.1. 文本格式

源文件、頭文件、Makefile等文本文件一律采用UTF-8 without BOM編碼,采用Unix風格換行格式。文本文件末尾應有且只有一個換行符,即末尾應有且只有一個空行。

3.2. 行長度

每行字符數原則上不超過120。包含長路徑的#include語句、頭文件#define保護可以無視此規則。

3.2.1. 表達式換行

較長的表達式可在運算符處換行,換行處的運算符屬于舊行,新行對齊到舊行中的相同邏輯層級。例如:

voidfoo(void)
{
if((aos_list_next(list_node)!=&list_head&&!priv)||
!(strcmp(symbol,default_symbol)&&blahblahblahblahblahblah()&&
meomeomeomeomeomeomeomeomeomeomeomeomeomeomeomeo(NULL))){
/*...*/
}
}

3.2.2. 函數換行

較長的函數定義、聲明可在返回值類型和函數名稱之間換行。若返回值為指針類型,*屬于新行。例如:

staticunsignedlong
blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah(void);
staticconstmanager_priv_t
*blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah(intindex);

較長的函數定義、聲明、調用可在參數列表中間換行,參數列表中間換行后新行應縮進至舊行第一個參數處。例如:

voidblahblahblahblahblahblahblahblahblah(manager_priv_t*priv,intindex,
constchar*proc_name);

voidfoo(void)
{
blahblahblahblahblahblahblahblahblahblah(get_manager_priv(manager),0,
"meomeomeomeomeomeomeomeo");
}

3.2.3. 字符串換行

較長的字符串可在空格處換行,一般情況下換行處的空格屬于舊行。例如:

voidfoo(void)
{
printf("TheGNUoperatingsystemconsistsofGNUpackages"
"(programsspecificallyreleasedbytheGNUProject)"
"aswellasfreesoftwarereleasedbythirdparties.
");
}

3.3. 縮進

使用空格縮進,每次4個空格。全文不應出現制表符(tab)。例如:

voidfoo(unsignedintnbr_processes)
{
unsignedinti;

while(i

宏定義、行尾注釋、結構體、聯合體、枚舉等內部可縮進實現多行對齊,但不作強制要求。若有縮進,應對齊到4的整數倍。例如:

/*此處數字0縮進32個字符,即位于第33列。*/
#defineSTAGE_UPDATE_CONTINUE0
#defineSTAGE_UPDATE_COMPLETE1

/*合法*/
#defineEVENT_RX_FULL(1U<flags=(x);
}while(0)

/*合法*/
#defineaos_dev_set_ops(dev,x)
do{
(dev)->ops=(x);
}while(0)

/*此處注釋縮進24個字符,即位于第25列。*/
foo(NULL);/*abc*/
blahblahblahblahblah();/*xyz*/

/*合法*/
foofoofoo();/*abc*/
foofoo();/*xyz*/

分行定義的宏,第二行起應縮進一次。例如:

#defineaos_dev_set_id(dev,x)
do{
(dev)->id=(x);
}while(0)

switch塊中的case語句和default語句與switch語句縮進層級相同。例如:

switch(stage){
caseSOCK_STG_DISCONNECTED:
foo();
break;
caseSOCK_STG_CONNECTED:
sock->connected=1;
break;
default:
break;
}

3.4. 花括號

函數體的左花括號另起一行;其他情況下左花括號不另起一行。一般情況下左花括號后續內容另起一行;宏定義中、數組、結構體、聯合體初始化時若花括號中內容較短則左花括號后續內容可以不另起一行。一般情況下右花括號另起一行;宏定義中、數組、結構體、聯合體初始化時若花括號中內容較短則右花括號可以不另起一行。右花括號與后續內容組合成一行。例如:

typedefstructmanager_priv{
intindex;
void*data;
}manager_priv_t;

#defineset_manager_index(x,idx)do{(x)->priv->index=(idx);}while(0)

#ifdef__cplusplus
extern"C"{
#endif

voidfoo(void)
{
inti=0;

/*...*/

if(i==0){
/*...*/
}else{
/*...*/
}
}

manager_priv_tpriv={0,NULL,};

#ifdef__cplusplus
}
#endif

3.5. 空格

行尾不應有空格。三元操作符和二元操作符(獲取成員的.和->操作符除外)前后留有空格。例如:

x=a?b:c;
v=w*x+y/z;
len=x.length;
priv=proc->priv;

一元操作符與參數之間不留空格。例如:

x=*p;
p=&x;
i++;
j=--i;

逗號右側若有內容,逗號與右側內容之間應有空格。例如:

voidfoo(intx,inty);

分號右側若有內容(右圓括號或另外一個分號除外),分號與右側內容之間應有空格。例如:

for(i=0;i

圓括號內部內容與圓括號之間不留空格。例如:

len=strlen(name);

for(i=0;i

圓括號與左側關鍵字之間應有空格。例如:

while(1){
/*...*/
}

if(i==0){
/*...*/
}

圓括號與左側函數名之間不留空格。例如:

intload_file(constchar*name)
{
foo(0);
/*...*/
}

類型轉換中的圓括號與右側內容之間不留空格。例如:

manager_priv_t*priv=(manager_priv_t*)p;

方括號與左側內容、內部內容之間不留空格。例如:

c=name[i];

左花括號左側或右側若有內容,左右內容與左花括號之間應有空格。右花括號左側若有內容,左側內容與右花括號之間應有空格;右花括號右側若有內容(分號、逗號除外),右側內容與右花括號之間應有空格。例如:

#defineset_manager_index(x,idx)do{(x)->priv->index=(idx);}while(0)

manager_priv_tpriv={0,NULL,};

分行定義的宏,與左側內容之間應有空格。例如:

#defineset_manager_index(x,idx)
do{
(x)->priv->index=(idx);
}while(0)

3.6. 指針

指針聲明或定義時,*應靠近變量名稱。*與修飾符之間應有空格。例如:

int*p;
constchar*name;
void*constptr;
void(*func)(void*arg);

3.7. 數值常量

十六進制數字A~F使用大寫形式。表示二進制的前綴0b和表示十六進制的0x使用小寫形式。后綴U和L使用大寫形式。后綴f使用小寫形式。表示冪的e和p使用小寫形式。例如:

unsignedintb=0b0101;
unsignedintx=0xABCDEF;
unsignedintu=0U;
longintl=0L;
unsignedlongintul=0UL;
floatf=1.0f;
longdoubleld=1.0L;
doubledd=-1.5e-5;
doublexd=0xA.Bp12;

3.8. 注釋

使用C90風格的/* */,不使用C++風格的//。/*或*/與注釋正文之間應有空格。行尾的注釋和代碼之間應有空格。完整語句注意首字母大寫和標點符號,簡單詞組可以不使用標點。注意區分中英文標點。TODO:使用特定注釋格式可利用doxygen等自動化工具生成文檔。例如:

/*
*ThissourcefileispartofAliOSThings.
*ZhangSan
*2021.07.01
*/

/*ZhangSan
*2021.07.01*/

/*ThispointermustNOTbeNULL.*/

/*connecting*/

4. 頭文件

4.1. 路徑

為避免與第三方庫的頭文件命名沖突,公用組件的頭文件應存放于子目錄中,引用時路徑包含子目錄名稱。例如:

#include

4.2. 引號和尖括號

只有包含與本源文件處于同路徑中的頭文件時使用引號,其他情況均使用尖括號。例如:

#include
#include"my_demo.h"

4.3. 包含次序

包含頭文件的次序如下:|次序 |種類| |-:- |:-| |1 |C語言標準庫頭文件和工具鏈頭文件| |2 |公用組件的頭文件| |3 |本工程頭文件|

例如:

#include
#include
#include
#include
#include"my_demo.h"

4.4. 保護

所有頭文件都應該使用#define保護來防止被重復包含。相關宏命名格式是PATH_FILE_H。例如,頭文件aos/common.h可按如下方法保護:

#ifndefAOS_COMMON_H
#defineAOS_COMMON_H

/*全部內容*/

#endif/*AOS_COMMON_H*/

4.5. 函數、變量聲明

頭文件中的函數聲明不使用extern關鍵字。頭文件中的全局變量聲明使用extern關鍵字。例如:

voidaos_cfg_file_close(intfd);
externchar**aos_process_argv;

4.6. extern "C"關鍵字

公用頭文件中聲明的函數和全局變量應該使用extern "C"關鍵字修飾。#include不應使用extern "C"關鍵字修飾。#define、類型定義不作要求,可酌情考慮。例如:

#ifndefAOS_COMMON_H
#defineAOS_COMMON_H

#include

#defineAOS_STRING_MAX_LEN127
#defineAOS_LSTRING_MAX_LEN511

typedefstructaos_tm{
unsignedintsec;
unsignedintmin;
unsignedinthour;
unsignedintmday;
unsignedintmon;
unsignedintyear;
}aos_tm_t;

#ifdef__cplusplus
extern"C"{
#endif

externcharaos_process_symbol[AOS_STRING_MAX_LEN+1];

voidaos_start(void);

#ifdef__cplusplus
}
#endif

#endif/*AOS_COMMON_H*/

5. 其他注意事項

只在本編譯單元使用的函數、全局變量應使用static修飾符。在不影響功能的前提下,指針類型的函數參數盡量使用const修飾符。自增、自減運算符單獨使用時采用后置形式。數組、結構體初始化列表、枚舉類型定義中的最后一個成員之后應有逗號。例如:

intoffsets[]={
0,
1,
};

來源:https://help.aliyun.com/document_detail/311306.html






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式系統
    +關注

    關注

    41

    文章

    3620

    瀏覽量

    129666
  • C語言
    +關注

    關注

    180

    文章

    7614

    瀏覽量

    137468
  • BOM
    BOM
    +關注

    關注

    5

    文章

    258

    瀏覽量

    40303
  • UTF-8
    +關注

    關注

    0

    文章

    13

    瀏覽量

    7866

原文標題:嵌入式實時操作系統 AliOS Things 的編碼風格

文章出處:【微信號:工程師進階筆記,微信公眾號:工程師進階筆記】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    使用STM32快速開發AliOS Things硬件與軟件環境

    AliOS ThingsAliOS 家族旗下的、面向 IoT 領域的、輕量級物聯網嵌入式操作系統
    的頭像 發表于 01-22 09:17 ?1.8w次閱讀

    AliOS Things lorawanapp應用介紹

    ThingsAliOS 家族旗下的、面向 IoT 領域的、輕量級物聯網嵌入式操作系統。文本旨在給大家示范一下其中的lorawanapp的示例,完成一個LoRaWAN網絡的構建和
    發表于 01-22 16:43

    AliOS Things 持續集成(CI)系統介紹

    與一般的CI系統不同,AliOS Things的功能驗證是需要運行在多種多樣的嵌入式芯片中的,這里需要解決的難題是:如何屏蔽多樣化嵌入式
    發表于 01-26 15:34

    介紹14種主流的RTOS操作系統

    、NuttX,而國產的嵌入式操作系統包括都江堰操作系統(djyos)、Alios Things、Huawei LiteOS、RT-Threa
    發表于 10-27 07:28

    介紹十四種嵌入式操作系統的特點

    都江堰操作系統(djyos)、Alios Things、Huawei LiteOS、RT-Thread、SylixOS。下面分別介紹這十四種種嵌入式
    發表于 10-27 09:15

    主流的14種嵌入式操作系統的特點

    、NuttX,而國產的嵌入式操作系統包括都江堰操作系統(djyos)、Alios Things、Huawei LiteOS、RT-Threa
    發表于 12-14 06:57

    主流的嵌入式操作系統有哪些?

    、NuttX,而國產的嵌入式操作系統包括都江堰操作系統(djyos)、Alios Things、Huawei LiteOS、RT-Threa
    發表于 12-27 07:27

    嵌入式實時操作系統教程

    嵌入式實時操作系統教程:以VRTX為對象詳細介紹嵌入式實時
    發表于 04-19 21:55 ?44次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>實時</b><b class='flag-5'>操作系統</b>教程

    嵌入式操作系統有哪些?

    嵌入式操作系統有哪些? 下面介紹國外和國內常用的實時操作系統。1. 國外著名的實時
    發表于 06-17 00:32 ?1.3w次閱讀

    實時操作系統用于嵌入式應用系統的設計

    概述了嵌入式系統的開發工具實時操作系統的特點和核心內容;分析了在利用實時操作系統進行
    發表于 10-10 15:23 ?42次下載
    <b class='flag-5'>實時</b><b class='flag-5'>操作系統</b>用于<b class='flag-5'>嵌入式</b>應用<b class='flag-5'>系統</b>的設計

    米爾科技嵌入式實時操作系統介紹

    嵌入式實時操作系統μC/OS-Ⅱ經典實例:基于STM32處理器》緊緊圍繞“μC/OS-Ⅱ系統設計”這一主題,立足實踐解析了嵌入式
    的頭像 發表于 11-25 09:02 ?2361次閱讀
    米爾科技<b class='flag-5'>嵌入式</b><b class='flag-5'>實時</b><b class='flag-5'>操作系統</b><b class='flag-5'>介紹</b>

    嵌入式實時操作系統的應用詳細教程說明

    本文檔的主要內容詳細介紹的是嵌入式實時操作系統的應用詳細教程說明包括了:1 嵌入式系統
    發表于 12-05 08:00 ?2次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>實時</b><b class='flag-5'>操作系統</b>的應用詳細教程說明

    詳解目前主流的嵌入式操作系統(RTOS)操作系統

    、NuttX,而國產的嵌入式操作系統包括都江堰操作系統(djyos)、Alios Things、Huawei LiteOS、RT-Threa
    發表于 10-20 12:36 ?16次下載
    詳解目前主流的<b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統</b>(RTOS)<b class='flag-5'>操作系統</b>

    嵌入式實時操作系統

    都江堰操作系統(djyos)、Alios Things、Huawei LiteOS、RT-Thread、SylixOS。下面分別介紹這十四種種嵌入式
    發表于 10-20 14:05 ?17次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>實時</b><b class='flag-5'>操作系統</b>

    嵌入式操作系統

    嵌入式操作系統一、嵌入式操作系統概述1.1 嵌入式操作系統的特點1.2
    發表于 11-03 18:36 ?46次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>操作系統</b>
    主站蜘蛛池模板: 4虎影院午夜在线观看 | 日韩无码在线 | 精品久久电影网 | 亚洲AV成人无码999WWW | 精品欧美一区二区三区久久久 | 国产ts在线| 久久久精品3d动漫一区二区三区 | 在线国产a不卡 | 西施打开双腿下面好紧 | 午夜视频无码国产在线观看 | 美女内射少妇三区五区 | 亚洲欧美日韩国产精品26u | 美女一级毛片免费不卡视频 | 我的漂亮朋友在线观看全集免费 | 欧美人与动牲交A免费 | 色青青草原桃花久久综合 | 贵妃高h荡肉呻吟np杨玉环 | 草莓视频在线播放视频 | 色多多旧版污污破解版 | 农村脱精光一级 | 黄色毛片a | 午夜性色一区二区三区不卡视频 | 花蝴蝶高清影视视频在线播放 | 国产AV国产精品国产三级在线L | 美女坐脸vk | 国产三级在线免费 | 好大好硬好湿再深一点网站 | 欧美激情一区二区三区AA片 | ZZoo兽2皇| 久爱在线中文在观看 | 久久99热只有频精品 | 99久久国产综合精品成人影院 | 精品淑女少妇AV久久免费 | 中国拍三a级的明星女 | 午夜精品久久久久久影视riav | 亚洲精品国产熟女久久久 | 办公室丝袜老师在线观看 | 攵女yin乱合集高h | 老师扒开尿口男生摸尿口 | 永久久久免费人妻精品 | 国产成年网站v片在线观看 国产成年人在线观看 |