<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 設計應用 > 用點亮LED舉例,說明嵌入式軟件分層設計的思想

          用點亮LED舉例,說明嵌入式軟件分層設計的思想

          作者:時間:2024-02-29來源:網絡收藏

          開發,點燈一路發” —— 今天我們就以控制閃爍為例,來聊聊分層。

          本文引用地址:http://www.ex-cimer.com/article/202402/455842.htm
          ———————————           
          |          |
          |     P1.1 |-----I<|--------------<|
          |          |                
          |     P2.1 |-------------/ ---------|--.
          |          |
          |          |
          ———————————      

          1. 兩層結構

          硬件層<-->層--最粗糙的分層架構

          /*****************************/
          #include 
          int main(){
            int i=0;
            while(1)
             {
                P1_1=0;
                for(i=0;i<5000;i++);
                P1_1=1;
                for(i=0;i<5000;i++);
            }
          }

          2. 三層結構

          硬件層<--> 驅動層<-->應用層

          /*******驅動頭文件 driver.h*********/
          void delay();
          void led_on();
          void led_off();
          /**********驅動源文件 driver.c******/
          #include 
          #include"driver.h"
          /*延時函數*/
          void delay(){
             int i=0;
             for(i=0;i<5000;i++);
          }
          void led_on(){
             P1_1=0;
          }
          void led_off(){
             P1_1=1;
          }
          /*****應用系統***************/
          #include“../driver/driver.h”
          int main(){
            while(1)
             { 
                 led_on();
                 delay();
                 led_off();
                 delay();
            }
          }

          3. 四層結構

          硬件層<-->驅動層<-->操作系統層<-->應用層

          /********驅動***********************/
          #include
          #include
          #include
          #include
          #include
          #include
          #include
          #include
          int led_init(void);
          void led_cleanup();
          static int device_open(struct inode *,struct file*);
          static int device_release(struct inode *,struct file*);
          static ssize_t device _write(struct file*,const char *,size_t,loff_t *);
          int init_model(void);
          void cleanup_module(void);
          struct file_operations led_ops={
          .owner=THIS_MODULE,
          ..............................
          }
          int led_init(void)
          {
          ..............................
          }
          void led_cleanup()
          {
          ..............................
          }
          static int device_open(struct inode * inode ,struct file* file)
          {
          ..............................
          }
          static int device_release(struct inode *inode,struct file* file)
          {
          ..............................
          }
          static ssize_t device _write(struct file *file,const char * buffer,size_t length,loff_t *offset)
          {
          ..............................
          int init_model(void)
          {
          ..............................
          }
          modele_init(led_init);
          module_exit(led_cleanup);
          MODULE_LICENCE("GPL");
          /************應用****************/
          #include 
          #include 
          #include 
          #include
          #define   "/dev/led"
          int main(){
              File *fp=fopen(,RDWR);
              if(!fp){
                while(1){
                  ioctl(fp,1);
                  sleep(1);
                  ioctl(fp,0);
                  sleep(0);
               }
            }
             fclose(fp);
          }

          從上面的例子可以看出,層次越多,似乎系統的代碼越多,開發者的工作量也就越大。實際情況是真的如此嗎?其實分層的目的主要:

          1. 是降低系統開發難度;

          2. 是為了復用,解耦,層次分明。

          驅動層和中間的操作系統層是可以復用的,產品升級或更新換代的時候,雖然總的代碼量是大的,但實際有很多代碼是不需要重新開發的,系統開發的工作量相對較小。比如說IO口調整了,甚至是整個硬件板子更換了,上只要調整驅動即可。

          很多大學的系統課程中采用的是兩層結構,主要的原因是教材中的示例一般比較簡單,其主要目的是為了演示如何使用芯片,如何實現某個功能,很少考慮復用的問題。

          為了講清楚其中的操作方法,其代碼會盡量簡單,即使是實現相對比較復雜的功能可能也只是采用抽象為函數的方法,很少考慮工程的問題,在潛移默化中很多人就以為兩層架構就是理所當然的。

          具體采用何種分層結構就是與產品相關的。比如大家都知道坐飛機要比步行快,在校園里從上課的教室到休息的宿舍哪一種方式好呢?當然是步行。反之,從南京到北京,如果坐飛機肯定要比步行好(當然,個人覺得更好的選擇是坐高鐵)。

          第3種方式似乎代碼量是最大的,但是要記住底層是很少改的,所以開發的時候就是寫應用,這個代碼量有多少呢?優勢可見一斑!



          關鍵詞: 嵌入式 LED 軟件 設計

          評論


          相關推薦

          技術專區

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();