在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 設(shè)計(jì)應(yīng)用 > 用點(diǎn)亮LED舉例,說(shuō)明嵌入式軟件分層設(shè)計(jì)的思想

            用點(diǎn)亮LED舉例,說(shuō)明嵌入式軟件分層設(shè)計(jì)的思想

            作者: 時(shí)間:2024-02-29 來(lái)源:網(wǎng)絡(luò) 收藏

            開(kāi)發(fā),點(diǎn)燈一路發(fā)” —— 今天我們就以控制閃爍為例,來(lái)聊聊分層。

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

            1. 兩層結(jié)構(gòu)

            硬件層<-->層--最粗糙的分層架構(gòu)

            /*****************************/
            #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. 三層結(jié)構(gòu)

            硬件層<--> 驅(qū)動(dòng)層<-->應(yīng)用層

            /*******驅(qū)動(dòng)頭文件 driver.h*********/
            void delay();
            void led_on();
            void led_off();
            /**********驅(qū)動(dòng)源文件 driver.c******/
            #include 
            #include"driver.h"
            /*延時(shí)函數(shù)*/
            void delay(){
               int i=0;
               for(i=0;i<5000;i++);
            }
            void led_on(){
               P1_1=0;
            }
            void led_off(){
               P1_1=1;
            }
            /*****應(yīng)用系統(tǒng)***************/
            #include“../driver/driver.h”
            int main(){
              while(1)
               { 
                   led_on();
                   delay();
                   led_off();
                   delay();
              }
            }

            3. 四層結(jié)構(gòu)

            硬件層<-->驅(qū)動(dòng)層<-->操作系統(tǒng)層<-->應(yīng)用層

            /********驅(qū)動(dòng)***********************/
            #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");
            /************應(yīng)用****************/
            #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);
            }

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

            1. 是降低系統(tǒng)開(kāi)發(fā)難度;

            2. 是為了復(fù)用,解耦,層次分明。

            驅(qū)動(dòng)層和中間的操作系統(tǒng)層是可以復(fù)用的,產(chǎn)品升級(jí)或更新?lián)Q代的時(shí)候,雖然總的代碼量是大的,但實(shí)際有很多代碼是不需要重新開(kāi)發(fā)的,系統(tǒng)開(kāi)發(fā)的工作量相對(duì)較小。比如說(shuō)IO口調(diào)整了,甚至是整個(gè)硬件板子更換了,上只要調(diào)整驅(qū)動(dòng)即可。

            很多大學(xué)的系統(tǒng)課程中采用的是兩層結(jié)構(gòu),主要的原因是教材中的示例一般比較簡(jiǎn)單,其主要目的是為了演示如何使用芯片,如何實(shí)現(xiàn)某個(gè)功能,很少考慮復(fù)用的問(wèn)題。

            為了講清楚其中的操作方法,其代碼會(huì)盡量簡(jiǎn)單,即使是實(shí)現(xiàn)相對(duì)比較復(fù)雜的功能可能也只是采用抽象為函數(shù)的方法,很少考慮工程的問(wèn)題,在潛移默化中很多人就以為兩層架構(gòu)就是理所當(dāng)然的。

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

            第3種方式似乎代碼量是最大的,但是要記住底層是很少改的,所以開(kāi)發(fā)的時(shí)候就是寫(xiě)應(yīng)用,這個(gè)代碼量有多少呢??jī)?yōu)勢(shì)可見(jiàn)一斑!



            關(guān)鍵詞: 嵌入式 LED 軟件 設(shè)計(jì)

            評(píng)論


            相關(guān)推薦

            技術(shù)專區(qū)

            關(guān)閉