日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

单片机编程系列之分层设计1

發布時間:2023/12/29 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单片机编程系列之分层设计1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

本次學習了百問網的七天物聯網直播課收獲很多,寫下筆記記錄一下。

1.代碼分層設計

在《代碼大全》第五章中,可以把程序分為這幾個層次:

  • 第一層:軟件系統
  • 第二層:分解為子系統后包
  • 第三層:分解為類
  • 第四層:分解為子程序
  • 第五層:子程序內部的設計

所有的系統都有分層的概念,這個可以提高協同效率,使各個組件緊密協作,在內容上細分,互不干擾。方便修改,維護成本小。因此,對于一個單片機程序系統來說也是可以分層設計的,這在復雜的項目中,極為方便。

2.第一層:軟件系統

下面我們用一個讀取按鍵值然后亮燈的單片機的程序為例,我們將按照分層設計的方法進行設計。

int main(void) {init_board(); /*MCU低級初始化*/init_dev(); /*所有外設初始化*/loop(); /*運行軟件程序*/ }

上面就是我們所設計的軟件系統層,這是個最基礎的軟件可運行的軟件系統層,完整的系統層還包括故障處理程序,復位程序,初始化成功判斷程序等。

3.第二層分解為子系統和包。

對于上面這個軟件系統來說,它的子系統就是init_board()和init_dev()和loop(),init_board()包含的是MCU的引腳,ADC,中斷的初始化。而init_board()則包含了按鍵的信息注冊(結構體信息添加)和LED的信息注冊,下面是loop();這個子系統的示例。

void loop(void) {while (1){key_led();} }

當然子系統里面,還可以包含子系統。

void key_led(void) {int val;led *l;l = get_led("led1");val = read_key();if (val != -1){if (val == 0xA)l->control(l, 1);else if (val == 0xB)l->control(l, 0);}}

可以看出,這個獲取按鍵值然后亮燈的子系統里面還有,獲取LED信息的系統函數get_led(“led1”);閱讀按鍵子系統函數read_key();所以這又分為了一層子系統。

4.分解為類

C語言沒有類,但有結構體。

typedef struct key {char *name;int code;void (*init)(struct key *k);int (*read)(struct key *k); }key, *p_key; typedef struct led {char *name;void (*init)(struct led *l);int (*control)(struct led *l, int color); /* 0x00rrggbb */ }led, *p_led;

初始化類然后注冊給結構體數組

static key k1 = {"k1", 0xA, NULL, read_key1};void k1_init(void) {register_key(&k1); }void register_key(key *k) {keys[key_cnt] = k;key_cnt++; }

這樣只需要查詢數組keys[]就可以得到底層的子程序與信息。

key *get_key(char *name) {int i = 0; for (i = 0; i < key_cnt; i++)if (strcmp(name, keys[i]->name) == 0)return keys[i];return NULL; }

5.分解為子程序


子程序就如圖中所標。

6.第五層:子程序內部的設計

子程序內部的設計就比較簡單了,是比較基礎的代碼編輯。

總結:綜上所訴 我畫了個結構圖

4結構體注冊的時候,會將上層需要的函數通過結構體里面的函數指針提供給他。

總結

以上是生活随笔為你收集整理的单片机编程系列之分层设计1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。