中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

如何做國外網(wǎng)站彩票的推廣網(wǎng)絡(luò)營銷策劃書總結(jié)

如何做國外網(wǎng)站彩票的推廣,網(wǎng)絡(luò)營銷策劃書總結(jié),做二手貨的網(wǎng)站有哪些,制作個(gè)人網(wǎng)站主頁大家好,今天分享一篇嵌入式軟件架構(gòu)設(shè)計(jì)相關(guān)的文章。 軟件架構(gòu)這東西,眾說紛紜,各有觀點(diǎn)。在我看來,軟件架構(gòu)是軟件系統(tǒng)的基本結(jié)構(gòu),包含其組件、組件之間的關(guān)系、組件設(shè)計(jì)與演進(jìn)的規(guī)則,以及體現(xiàn)這些規(guī)則的基…

大家好,今天分享一篇嵌入式軟件架構(gòu)設(shè)計(jì)相關(guān)的文章。

軟件架構(gòu)這東西,眾說紛紜,各有觀點(diǎn)。在我看來,軟件架構(gòu)是軟件系統(tǒng)的基本結(jié)構(gòu),包含其組件、組件之間的關(guān)系、組件設(shè)計(jì)與演進(jìn)的規(guī)則,以及體現(xiàn)這些規(guī)則的基礎(chǔ)設(shè)施。

軟件架構(gòu),從來不是一件容易事,它貫穿在產(chǎn)品的整個(gè)生命周期,需要所有團(tuán)隊(duì)成員遵守并自律,才能將架構(gòu)思想在軟件中體現(xiàn)。新手工程師,由于經(jīng)歷的項(xiàng)目太少,看不到項(xiàng)目全貌,很難從全局理解軟件架構(gòu)。但軟件架構(gòu)真的只是資深工程師的專利嗎?這個(gè)也不見得。

古人作文,講究立意為先。今天工程師做項(xiàng)目和產(chǎn)品,也應(yīng)該先立意。這個(gè)意,就是指要有高度。工程師入門能從軟件架構(gòu)的高度出發(fā),看待軟件問題,相信對軟件的理解,會更加深刻一些。因此,我總結(jié)了軟件架構(gòu)的六個(gè)步驟,供嵌入式工程師參考。

上次談到了嵌入式軟件架構(gòu)的第一個(gè)步驟,抽象層。建立抽象層(HAL或者DAL)的目的,是為了隔離硬件,讓代碼與硬件無關(guān)。即使整個(gè)項(xiàng)目的代碼,由某工程師一個(gè)人完成,抽象層仍是是有必要的。

但這次我們要聊的是,統(tǒng)一的基礎(chǔ)設(shè)施,這是針對多人合作一個(gè)項(xiàng)目,或者多個(gè)項(xiàng)目共享同一個(gè)系統(tǒng)架構(gòu)的情況。

如果說,你手頭的項(xiàng)目,沒有與他人合作,也不會有后續(xù)的相關(guān)項(xiàng)目,軟件基礎(chǔ)設(shè)施這一步,可以直接跳過。

基礎(chǔ)設(shè)施,分為硬件基礎(chǔ)設(shè)施和軟件基礎(chǔ)設(shè)施。硬件基礎(chǔ)設(shè)施,包含常用器件庫、封裝庫、原理圖庫和硬件參考設(shè)計(jì)等等;而今天我們討論的重點(diǎn),主要在于軟件基礎(chǔ)設(shè)施。軟件基礎(chǔ)設(shè)施包含以下內(nèi)容:

  • ??基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)。

  • ??底層庫。比如C標(biāo)準(zhǔn)庫、加密庫、校驗(yàn)庫、工具庫等等。

  • ??操作系統(tǒng)/調(diào)度機(jī)制。包含操作系統(tǒng)以及調(diào)度相關(guān)服務(wù)。

  • ??中間件。比如文件系統(tǒng)、協(xié)議棧、數(shù)據(jù)庫等。

  • ??框架與機(jī)制。比如消息通信機(jī)制、事件驅(qū)動(dòng)機(jī)制、狀態(tài)機(jī)框架、行為樹框架。

  • ??工具支持。

  • ??統(tǒng)一的編程工具鏈。

  • ??統(tǒng)一的代碼風(fēng)格和編程規(guī)范。

在一些小公司粗放的開發(fā)模式中,并不規(guī)定工程師所依賴的軟件平臺、硬件平臺和工具,而是由工程師自己決定。很多工程師,也喜歡這種自由奔放的開發(fā)模式,認(rèn)為只有在這種環(huán)境中,才能發(fā)揮自身創(chuàng)造力。這種認(rèn)知是有偏差的,這個(gè)我們后續(xù)找機(jī)會詳細(xì)討論。

隨著小公司研發(fā)能力的提升,對軟件基礎(chǔ)設(shè)施進(jìn)行約束和規(guī)定,幾乎是注定的事情。因?yàn)檐浖^(qū)別于其他技術(shù)的本質(zhì),是在于其復(fù)用性。

復(fù)用程度越高的軟件,質(zhì)量越高,對開發(fā)效率和開發(fā)質(zhì)量的提升,就越大。無論從公司的降本增效還是科學(xué)管理的角度,都有著強(qiáng)大的動(dòng)機(jī),去統(tǒng)一軟件基礎(chǔ)設(shè)施。當(dāng)軟件的基礎(chǔ)設(shè)施統(tǒng)一之后,會產(chǎn)生如下優(yōu)點(diǎn):

  • ??軟件質(zhì)量提升,風(fēng)格的高度一致性

  • ??軟件復(fù)用性,會提升至一個(gè)新的水平

  • ??將可復(fù)用的功能,盡量抽象到基礎(chǔ)設(shè)施層,減少軟件冗余,提升開發(fā)效率。

  • ??為高層模塊提供約束和紀(jì)律

  • ??有利于團(tuán)隊(duì)的技術(shù)積累和技術(shù)傳承

  • ??有利于團(tuán)隊(duì)的技術(shù)培訓(xùn)

  • ??是團(tuán)隊(duì)進(jìn)行單元測試和測試驅(qū)動(dòng)開發(fā),以及跨平臺開發(fā)的前提。

因此,是否統(tǒng)一,根本不是一個(gè)有爭議的問題;如何統(tǒng)一,才是今天我們的重點(diǎn)。

一、基礎(chǔ)類型與宏定義

統(tǒng)一的軟件基礎(chǔ)設(shè)施的前提,就是聲明統(tǒng)一的基礎(chǔ)數(shù)據(jù)類型和宏,以克服不同的硬件平臺和編譯器的差異性。

比如下面是我從開源項(xiàng)目EventOS中摘錄出來的代碼,不見得很完整,只能代表在我在項(xiàng)目里需求。

#include?<stdbool.h>typedef?unsigned?int????????????????????eos_u32_t;
typedef?signed?int??????????????????????eos_s32_t;
typedef?unsigned?short??????????????????eos_u16_t;
typedef?signed?short????????????????????eos_s16_t;
typedef?unsigned?char???????????????????eos_u8_t;
typedef?signed?char?????????????????????eos_s8_t;
typedef?bool????????????????????????????eos_bool_t;#define?EOS_NULL????????????????????????((void?*)0)#define?EOS_U32_MAX?????????????????????(0xffffffffU)
#define?EOS_U32_MIN?????????????????????(0U)
#define?EOS_U16_MAX?????????????????????(0xffffU)
#define?EOS_U16_MIN?????????????????????(0U)
#define?EOS_U8_MAX??????????????????????(0xffU)
#define?EOS_U8_MIN??????????????????????(0U)

編譯器相關(guān)的宏定義。使用宏,屏蔽掉編譯器的差異,會

/*?Compiler?Related?Definitions?*/
#if?defined(__ARMCC_VERSION)???????????/*?ARM?Compiler?*/#define?eos_section(x)??????????????__attribute__((section(x)))#define?eos_used????????????????????__attribute__((used))#define?eos_align(n)????????????????__attribute__((aligned(n)))#define?eos_weak????????????????????__attribute__((weak))#define?eos_inline??????????????????static?__inline#elif?defined?(__GNUC__)????????????????/*?GNU?GCC?Compiler?*/#define?eos_section(x)??????????????__attribute__((section(x)))#define?eos_used????????????????????__attribute__((used))#define?eos_align(n)????????????????__attribute__((aligned(n)))#define?eos_weak????????????????????__attribute__((weak))#define?eos_inline??????????????????static?__inline#elif?defined?(__IAR_SYSTEMS_ICC__)?????/*?for?IAR?Compiler?*/#define?eos_section(x)??????????????@?x#define?eos_used????????????????????__root#define?eos_align(n)????????????????PRAGMA(data_alignment=n)#define?eos_weak????????????????????__weak#define?eos_inline??????????????????static?inline#else#error?"The?current?compiler?is?not?supported.?"
#endif

一些常用的數(shù)據(jù)結(jié)構(gòu)。這些數(shù)據(jù)結(jié)構(gòu),與硬件和編譯器無關(guān),是在代碼中頻繁使用,并在多個(gè)模塊間共享的數(shù)據(jù)結(jié)構(gòu),有必要將其提升至基礎(chǔ)設(shè)施的層面進(jìn)行支持,以避免各個(gè)模塊,對同一個(gè)數(shù)據(jù)類型,進(jìn)行不同的定義帶來的數(shù)據(jù)轉(zhuǎn)換問題。

這些數(shù)據(jù)結(jié)構(gòu),與產(chǎn)品緊密相關(guān),不同的產(chǎn)品類型之間,各自是不同的。比如下面的定義。

typedef?struct?eos_date
{eos_u32_t?year???????????????:?16;eos_u32_t?month??????????????:?8;eos_u32_t?day????????????????:?8;
}?eos_date_t;typedef?struct?eos_time
{eos_u32_t?hour???????????????:?8;eos_u32_t?minute?????????????:?8;eos_u32_t?second?????????????:?6;eos_u32_t?ms?????????????????:?10;
}?eos_time_t;typedef?struct?eos_imu_data
{float?acc[3];float?gyr[3];float?mag[3];
}?eos_imu_data_t;

二、操作系統(tǒng)

有些芯片的資源太小,是不能運(yùn)行操作系統(tǒng)的。這些芯片,一般而言,也沒有辦法建立嚴(yán)謹(jǐn)?shù)那度胧杰浖軜?gòu),我們會在后續(xù)《小資源芯片的軟件開發(fā)平臺》中,單獨(dú)進(jìn)行討論。這里只討論芯片的。

不同的芯片,所能跑的操作系統(tǒng)是不同的。但如果要建立軟件基礎(chǔ)設(shè)施,應(yīng)該盡量選取同一個(gè)操作系統(tǒng)。

在現(xiàn)存的操作系統(tǒng)中,FreeRTOS和國產(chǎn)RT-Thread對各種不同的硬件架構(gòu)的芯片,支持比較廣泛,可以作為RTOS的首選。

而當(dāng)產(chǎn)品線異常豐富時(shí),特別是使用了某些小眾芯片,或者使用芯片商提供的操作系統(tǒng)時(shí),就沒有辦法建立統(tǒng)一的軟件基礎(chǔ)設(shè)施。這時(shí),有兩個(gè)辦法解決這一問題:

  • ??編寫高層模塊時(shí),使用宏定義和條件編譯,選擇對應(yīng)的RTOS API。這種一般用于所使用的操作系統(tǒng)較少的情況,比如說只有兩三種。

static?void?*task_handler?=?NULL;static?void?task_func_module_one(void?*parameter);void?module_one_init(void)
{/*?Newly?creating?a?task?to?run?the?module.?*/
#if?(EOS_RTOS_NAME?==?EOS_RTOS_NAME_FREERTOS)xTaskCreate(task_func_module_one,"TaskModule",?2048,?NULL,?2,(TaskHandle_t?*)&task_handler);
#elif?(EOS_RTOS_NAME?==?EOS_RTOS_NAME_RTTHREAD)task_handler?=?rt_thread_create("led1",?task_func_module_one,?NULL,2048,?2,?20);
#elseeos_assert(false);
#endifeos_assert(task_handler?!=?NULL);
}/*?The?task?function?of?the?module?one.?*/
static?void?task_func_module_one(void?*parameter)
{(void)parameter;/*?Initialization.?*/while?(1){/*?Add?the?task?function.?*/}
}
  • ??建立操作系統(tǒng)抽象層(OSAL,Operating System Abstraction Layer),以屏蔽操作系統(tǒng)的差異,使高層模塊依賴于OSAL。這種情況適合于資源豐富的情況。

  • 著名的POSIX標(biāo)準(zhǔn),就是為了建立OSAL的,FreeRTOS和RT-Thread都在不同程度上對POSIX標(biāo)準(zhǔn)進(jìn)行了支持;在 v嵌入式領(lǐng)域,CMSIS_OS也是為了建立操作系統(tǒng)的統(tǒng)一接口;但無論是POSIX和CMSIS_OS,被各RTOS支持的力度是不同,因此如果我們產(chǎn)品中需要建立嚴(yán)謹(jǐn)?shù)那度胧杰浖軜?gòu),還是要建立屬于自己的OSAL,以便屏蔽掉操作系統(tǒng)的不同帶來的差異。

三、中間件

中間件有很多類型,文件系統(tǒng)、各種協(xié)議棧、數(shù)據(jù)庫、日志模塊、Shell模塊,都屬于中間件的范疇。但在大部分情況下,這些也都屬于軟件基礎(chǔ)設(shè)施的范疇。

因?yàn)槲覀円坏┻x擇某個(gè)中間件,一般來說,是沒有必要更換的,正是由于這種穩(wěn)定性,中間件也可以納入軟件基礎(chǔ)設(shè)施的范疇。以下是我經(jīng)常使用的開源中間件:

  • ??FatFS

  • ??LwIP

  • ??FlashDB

  • ??uC/Modbus

  • ??CAN Festival

  • ??letter-shell

開源中間件,只占據(jù)了一小部分。實(shí)際產(chǎn)品中,中間件的大部分,都是產(chǎn)品或者項(xiàng)目私有的代碼。我日常所使用的主要有:?日志模塊?數(shù)據(jù)采集模塊?通訊傳輸層協(xié)議?通訊應(yīng)用層協(xié)議?文件傳輸協(xié)議?OTA功能 * 時(shí)間同步

中間件,占據(jù)了軟件基礎(chǔ)設(shè)施的大部分內(nèi)容。在產(chǎn)品開發(fā)中,之所以軟件復(fù)用性能夠做到越來越高,中間件的積累,是一個(gè)很重要的原因。

四、框架與機(jī)制

在不同的產(chǎn)品上,開發(fā)嵌入式軟件,除了RTOS之外,很多產(chǎn)品還需要一些框架的支持。常見的框架包括:?外設(shè)與驅(qū)動(dòng)框架?設(shè)備框架?消息框架?狀態(tài)機(jī)框架?行為樹框架?事件驅(qū)動(dòng)框架

這些框架的使用,與產(chǎn)品的特性相關(guān),由產(chǎn)品和需求所決定。比如家庭服務(wù)機(jī)器人中,需要應(yīng)用狀態(tài)機(jī)框架和行為樹框架,來應(yīng)對復(fù)雜的應(yīng)用層邏輯。而某些應(yīng)用層邏輯比較簡單的產(chǎn)品,就不需要使用狀態(tài)機(jī)和行為樹。

軟件基礎(chǔ)設(shè)施與硬件的關(guān)系

嵌入式軟件有一個(gè)區(qū)別于其他軟件領(lǐng)域的重要特性,那就是直接依賴于硬件。軟件基礎(chǔ)設(shè)施,有很多也是需要硬件去體現(xiàn)和承載。比如文件系統(tǒng),在規(guī)定某個(gè)源代碼比如FatFS作為其文件系統(tǒng)解決方案的同時(shí),所伴隨的硬件驅(qū)動(dòng)程序和硬件推薦設(shè)計(jì),也往往被固化,以便在下一個(gè)項(xiàng)目中進(jìn)行復(fù)用,并節(jié)約時(shí)間。

對于一些重要的且復(fù)雜的軟件基礎(chǔ)設(shè)施,如文件系統(tǒng)、網(wǎng)絡(luò)等,由于調(diào)試和測試都比較耗時(shí),一般推薦固化硬件設(shè)計(jì)的方式。硬件工程師,應(yīng)優(yōu)先對這些重要且復(fù)雜的軟件基礎(chǔ)設(shè)置,分配硬件資源,而硬件的其他工程,比如IO、ADC等,再行分配。

結(jié)論

嵌入式軟件基礎(chǔ)設(shè)施,非常重要,根據(jù)項(xiàng)目與產(chǎn)品的不同,它所包含的內(nèi)容也不盡相同。一般在項(xiàng)目啟動(dòng)時(shí),就會初步選定一些軟件基礎(chǔ)設(shè)施的內(nèi)容,比如RTOS、協(xié)議棧、文件系統(tǒng)等等。

需要指出的是,軟件基礎(chǔ)設(shè)施,也不是不變的,而是隨著產(chǎn)品開發(fā)發(fā)展,不斷會有新的組件和元素,加入到軟件基礎(chǔ)設(shè)施中去,也有可能會剝離掉舊的組件,就像生物的新陳代謝。

軟件基礎(chǔ)設(shè)施的新陳代謝,要溫和,要相對穩(wěn)定,添加和刪除,都要執(zhí)行謹(jǐn)慎原則。

http://www.risenshineclean.com/news/11241.html

相關(guān)文章:

  • 上海英文網(wǎng)站建設(shè)公司中國工商業(yè)聯(lián)合會
  • 免費(fèi)建站的手機(jī)app怎么做表格
  • 網(wǎng)站開發(fā) 深圳seo輿情優(yōu)化
  • 企業(yè)網(wǎng)站怎做seo技術(shù)培訓(xùn)東莞
  • 盧灣區(qū)網(wǎng)站建設(shè)制作網(wǎng)絡(luò)整合營銷理論
  • 個(gè)人建網(wǎng)站的步驟網(wǎng)站內(nèi)容優(yōu)化方法
  • 東山縣建設(shè)銀行網(wǎng)站企業(yè)郵箱查詢
  • 學(xué)做網(wǎng)站都要學(xué)什么專業(yè)外貿(mào)訂單一般在哪個(gè)平臺接
  • html5 網(wǎng)站建設(shè)方案百度競價(jià)排名的利與弊
  • 網(wǎng)站建設(shè)語百度搜索大全
  • 本科網(wǎng)站開發(fā)畢業(yè)設(shè)計(jì)我為什么不建議年輕人做運(yùn)營
  • 成人午夜黃網(wǎng)站在線觀看吉林網(wǎng)站seo
  • 網(wǎng)站怎么提高權(quán)重百度招聘網(wǎng)最新招聘信息
  • 專業(yè)3合1網(wǎng)站建設(shè)公司搜索風(fēng)云榜
  • 什么是營銷網(wǎng)站哈爾濱seo推廣優(yōu)化
  • 南京做網(wǎng)站南京樂識最優(yōu)如何快速推廣自己的品牌
  • 宜昌市高新區(qū)建設(shè)局網(wǎng)站如何做好市場推廣
  • 發(fā)布消息做任務(wù)的網(wǎng)站百度競價(jià)調(diào)價(jià)軟件
  • oa網(wǎng)站建設(shè)價(jià)格泉州百度推廣排名優(yōu)化
  • .design 域名的網(wǎng)站微信搜一搜seo優(yōu)化
  • 成品網(wǎng)站模板下載吉林seo刷關(guān)鍵詞排名優(yōu)化
  • 做網(wǎng)站推廣微信叫什么網(wǎng)名好適合口碑營銷的產(chǎn)品
  • 一般網(wǎng)站做哪些端口映射快速seo整站優(yōu)化排行
  • 帝國 只做網(wǎng)站地圖互聯(lián)網(wǎng)項(xiàng)目推廣是什么
  • 利用php制作動(dòng)態(tài)網(wǎng)站開發(fā)百度搜索關(guān)鍵詞排名
  • 網(wǎng)站建設(shè)怎么樣工作湘潭高新區(qū)最新新聞
  • 外貿(mào)公司網(wǎng)站建設(shè)落實(shí)20條優(yōu)化措施
  • 環(huán)球資源網(wǎng)官網(wǎng)長沙seo工作室
  • 湖南網(wǎng)站建設(shè)seo優(yōu)化國際新聞最新消息中國
  • 上海營銷型網(wǎng)站建設(shè)價(jià)格武漢服裝seo整站優(yōu)化方案