性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

  • 回復(fù)
  • 收藏
  • 點(diǎn)贊
  • 分享
  • 發(fā)新帖

【Rt-thread學(xué)習(xí)記】:設(shè)備層框架設(shè)計(jì)之故事續(xù)集。。。

筒子們,我胡漢三又回來(lái)啦,帖子停更了一段時(shí)間,主要是忙忙忙。。。忙著搬磚(悲催的是卻不掙錢(qián)。。。),好不容易裝了幾車(chē)磚,地主總算暫時(shí)的放過(guò)我了,可以歇口氣了,帖子更了一半被打斷的感覺(jué),好像夢(mèng)見(jiàn)女神,歷經(jīng)千辛萬(wàn)苦要打kiss了,鬧鐘響了,但是夢(mèng)想終歸還是要有的,不知道還有沒(méi)有看官老爺還在,管不了那么多了,我要關(guān)了鬧鐘,繼續(xù)去追我的女神了。。。

接下來(lái),還是改一下帖子的風(fēng)格,技術(shù)的細(xì)節(jié)太多,痛苦總是太多,忘了女神的美,還是聽(tīng)我慢慢的講故事吧。

話說(shuō)在遙遠(yuǎn)的遠(yuǎn)古時(shí)代,有兩個(gè)的程序猿小A和小B,接下來(lái)我們稱他為猿小A 和 猿小B吧。。。故事即將開(kāi)始。。。

1111

全部回復(fù)(25)
正序查看
倒序查看
2019-08-20 09:41

故事開(kāi)篇:

              這里是一個(gè)遠(yuǎn)古荒涼的小島,但是電子產(chǎn)業(yè)卻異常的火熱,人們除了辛苦的勞作,最大的樂(lè)趣就是擁有各種各種電子設(shè)備,這里就要杜撰一下了,猿小A和猿小B原本來(lái)自一個(gè)宗派,電子研發(fā)門(mén),這是個(gè)非常高端的機(jī)構(gòu),但是每年培養(yǎng)出的人才卻是比較少,而來(lái)到這個(gè)小島上攻城獅就只有他們倆了。

                  平淡的生活就這樣開(kāi)始了,隔壁老張打漁歸來(lái),大中午的發(fā)現(xiàn)空調(diào)低壓壓力老是在報(bào)警,重啟了十幾次也不行,這么熱的天誰(shuí)愿意來(lái)給修空調(diào)啊,但是沒(méi)空調(diào)那是要熟的節(jié)奏,于是老張來(lái)喊猿小A ,小A 幫我改改程序,把那該死的壓力報(bào)警去掉,我要熱死了,于是小A默默的收拾了一下電腦,工具就隨老張出門(mén)了,小B卻在一旁搖搖頭。。。

            話說(shuō),小A和小B來(lái)這個(gè)小島已經(jīng)好多年了,小A為人老實(shí),想法也少的出奇,可以說(shuō)是有求必應(yīng),小B卻截然不同,這么多年鄰里百家的各種需求和問(wèn)題,讓小B覺(jué)得搬磚生涯苦不堪言,他總是在不斷的思考一個(gè)問(wèn)題,程序的世界是不是真的應(yīng)該是這樣呢。。。




        

          


            

0
回復(fù)
2019-08-20 09:45
@程序小白
故事開(kāi)篇:             這里是一個(gè)遠(yuǎn)古荒涼的小島,但是電子產(chǎn)業(yè)卻異常的火熱,人們除了辛苦的勞作,最大的樂(lè)趣就是擁有各種各種電子設(shè)備,這里就要杜撰一下了,猿小A和猿小B原本來(lái)自一個(gè)宗派,電子研發(fā)門(mén),這是個(gè)非常高端的機(jī)構(gòu),但是每年培養(yǎng)出的人才卻是比較少,而來(lái)到這個(gè)小島上攻城獅就只有他們倆了。                 平淡的生活就這樣開(kāi)始了,隔壁老張打漁歸來(lái),大中午的發(fā)現(xiàn)空調(diào)低壓壓力老是在報(bào)警,重啟了十幾次也不行,這么熱的天誰(shuí)愿意來(lái)給修空調(diào)啊,但是沒(méi)空調(diào)那是要熟的節(jié)奏,于是老張來(lái)喊猿小A,小A幫我改改程序,把那該死的壓力報(bào)警去掉,我要熱死了,于是小A默默的收拾了一下電腦,工具就隨老張出門(mén)了,小B卻在一旁搖搖頭。。。           話說(shuō),小A和小B來(lái)這個(gè)小島已經(jīng)好多年了,小A為人老實(shí),想法也少的出奇,可以說(shuō)是有求必應(yīng),小B卻截然不同,這么多年鄰里百家的各種需求和問(wèn)題,讓小B覺(jué)得搬磚生涯苦不堪言,他總是在不斷的思考一個(gè)問(wèn)題,程序的世界是不是真的應(yīng)該是這樣呢。。。                              

幺蛾子比較多的猿小B找到小A 問(wèn):干了這么多年程序猿,你覺(jué)得程序的世界應(yīng)該是怎樣的。

      

  A:在宗門(mén)里,宗主和我講:

             程序的世界就是一條一條的語(yǔ)句,一條接著一條的執(zhí)行,而我們的意義就在于,把人們的需求變成各種各種的順序表,當(dāng)他們有需要的時(shí)候,我們就得給他們?nèi)ジ囊幌逻@個(gè)順序表。


0
回復(fù)
2019-08-20 09:49
@程序小白
幺蛾子比較多的猿小B找到小A問(wèn):干了這么多年程序猿,你覺(jué)得程序的世界應(yīng)該是怎樣的。       小A:在宗門(mén)里,宗主和我講:            程序的世界就是一條一條的語(yǔ)句,一條接著一條的執(zhí)行,而我們的意義就在于,把人們的需求變成各種各種的順序表,當(dāng)他們有需要的時(shí)候,我們就得給他們?nèi)ジ囊幌逻@個(gè)順序表。

B問(wèn):可是你有沒(méi)有想過(guò),我們每天辛勞的搬磚,改著各種各樣的需求,反而人們的需求越來(lái)越多,我們要改的東西也越來(lái)越多,我們就倆人,鐵打的也扛不住這么下去,能不能把他們的需求匯總一下,把里面共同的部分提取出來(lái),變化的部分單獨(dú)編寫(xiě),這樣雖然需求多了,但是萬(wàn)變不離其宗 ,我們的工作可就簡(jiǎn)單了。

           A問(wèn):可是那該怎么做呢,我只會(huì)搬磚啊。。。

           B陷入了沉思。。。

           有一天下著大雨,小B興高采烈的跑到小A家里來(lái)講,他想到解決一類需求的法子,例如今天想要加個(gè)U盤(pán),明天想換個(gè)便宜的flash,我們干脆做個(gè)框架出來(lái),把每一類設(shè)備相同的部分抽象出來(lái),不同的部分作為真正需求去更改,這不就行了。

          一幅圖片在小B的腦海里緩緩展開(kāi)。。。

0
回復(fù)
2019-08-20 10:13
@程序小白
小B問(wèn):可是你有沒(méi)有想過(guò),我們每天辛勞的搬磚,改著各種各樣的需求,反而人們的需求越來(lái)越多,我們要改的東西也越來(lái)越多,我們就倆人,鐵打的也扛不住這么下去,能不能把他們的需求匯總一下,把里面共同的部分提取出來(lái),變化的部分單獨(dú)編寫(xiě),這樣雖然需求多了,但是萬(wàn)變不離其宗,我們的工作可就簡(jiǎn)單了。          小A問(wèn):可是那該怎么做呢,我只會(huì)搬磚啊。。。          小B陷入了沉思。。。          有一天下著大雨,小B興高采烈的跑到小A家里來(lái)講,他想到解決一類需求的法子,例如今天想要加個(gè)U盤(pán),明天想換個(gè)便宜的flash,我們干脆做個(gè)框架出來(lái),把每一類設(shè)備相同的部分抽象出來(lái),不同的部分作為真正需求去更改,這不就行了。         一幅圖片在小B的腦海里緩緩展開(kāi)。。。[圖片][圖片]

       小B異常興奮的把腦子里的畫(huà)面用筆畫(huà)了出來(lái),拿給小A看。

        小A卻一臉懵逼的看了半天道:大哥,我這智商有限,不要總拿這些PPT來(lái)忽悠我好不好,真的看不懂。

       小B也很無(wú)奈,心里想,要不是這個(gè)島上只有你還能看懂點(diǎn)東西,我才不會(huì)找你一起分享我的想法呢,無(wú)奈歸無(wú)奈,小B開(kāi)始嘗試用小A能夠理解的話來(lái)給他解釋,道: 首先,你講的都沒(méi)有錯(cuò),程序就是一條一條執(zhí)行的語(yǔ)句,但是我相信對(duì)于函數(shù)應(yīng)用也很熟練了,通過(guò)函數(shù)封裝語(yǔ)句的方式,是不是比匯編的時(shí)代好過(guò)多了。。。

        小A點(diǎn)點(diǎn)頭。。。

        小B繼續(xù)講到:其實(shí)你潛意識(shí)里面理解了封裝最大的意義,卻沒(méi)有意識(shí)到,那現(xiàn)在我給你畫(huà)的圖,就是函數(shù)————函數(shù)之間的封裝,哪怕用函數(shù)直接調(diào)用的方式,要驅(qū)動(dòng)一個(gè)設(shè)備正常工作,相應(yīng)要記住或者編寫(xiě)的函數(shù)也是非常多吧?

        小A繼續(xù)點(diǎn)點(diǎn)頭。。。

        那我現(xiàn)在告訴你,我定義六個(gè)函數(shù),你只需要記住會(huì)用,那么通過(guò)他們你就能找到一想要的任何一個(gè)底層函數(shù)。。。類似這樣子。。。

0
回復(fù)
2019-08-20 10:22
@程序小白
      小B異常興奮的把腦子里的畫(huà)面用筆畫(huà)了出來(lái),拿給小A看。       小A卻一臉懵逼的看了半天道:大哥,我這智商有限,不要總拿這些PPT來(lái)忽悠我好不好,真的看不懂。      小B也很無(wú)奈,心里想,要不是這個(gè)島上只有你還能看懂點(diǎn)東西,我才不會(huì)找你一起分享我的想法呢,無(wú)奈歸無(wú)奈,小B開(kāi)始嘗試用小A能夠理解的話來(lái)給他解釋,道:首先,你講的都沒(méi)有錯(cuò),程序就是一條一條執(zhí)行的語(yǔ)句,但是我相信對(duì)于函數(shù)應(yīng)用也很熟練了,通過(guò)函數(shù)封裝語(yǔ)句的方式,是不是比匯編的時(shí)代好過(guò)多了。。。       小A點(diǎn)點(diǎn)頭。。。       小B繼續(xù)講到:其實(shí)你潛意識(shí)里面理解了封裝最大的意義,卻沒(méi)有意識(shí)到,那現(xiàn)在我給你畫(huà)的圖,就是函數(shù)————函數(shù)之間的封裝,哪怕用函數(shù)直接調(diào)用的方式,要驅(qū)動(dòng)一個(gè)設(shè)備正常工作,相應(yīng)要記住或者編寫(xiě)的函數(shù)也是非常多吧?       小A繼續(xù)點(diǎn)點(diǎn)頭。。。       那我現(xiàn)在告訴你,我定義六個(gè)函數(shù),你只需要記住會(huì)用,那么通過(guò)他們你就能找到一想要的任何一個(gè)底層函數(shù)。。。類似這樣子。。。[圖片]

       小A一臉懵逼的問(wèn)道:通過(guò)6個(gè)函數(shù)就能找得到任何一種設(shè)備的真正的驅(qū)動(dòng)函數(shù),這個(gè)怎么可能呢?

       小B開(kāi)始了自己的演講:通過(guò)6個(gè)函數(shù)找到任何一種設(shè)備的驅(qū)動(dòng)程序并不難,可以通過(guò)參數(shù)的方式實(shí)現(xiàn)嘛,小笨蛋,難得是要把驅(qū)動(dòng)程序全部都分類分名字管理起來(lái),同時(shí)給你的6個(gè)函數(shù)提供接口,這就需要引入設(shè)備驅(qū)動(dòng)框架的偉大概念了,通過(guò)注冊(cè)的方式將驅(qū)動(dòng)程序加入到驅(qū)動(dòng)框架中,然后通過(guò)設(shè)備驅(qū)動(dòng)框架的接口進(jìn)行設(shè)備的操作,懂了吧?

      小A還是依舊一臉懵逼。。。

      小B講:你先不用理解,只要會(huì)用就可以了,后面以你的智商絕對(duì)可以看懂我的偉大理念,放心吧。

       小A點(diǎn)點(diǎn)頭:好吧,那要怎樣做呢,你還是給我舉個(gè)例子吧,半個(gè)篇幅都是PPT,以后看著這些圖,我也搬不了磚啊。。。

      小B滿腦子黑線,還真要送佛送到西啊 。。。

0
回復(fù)
2019-08-20 15:00
@程序小白
      小A一臉懵逼的問(wèn)道:通過(guò)6個(gè)函數(shù)就能找得到任何一種設(shè)備的真正的驅(qū)動(dòng)函數(shù),這個(gè)怎么可能呢?      小B開(kāi)始了自己的演講:通過(guò)6個(gè)函數(shù)找到任何一種設(shè)備的驅(qū)動(dòng)程序并不難,可以通過(guò)參數(shù)的方式實(shí)現(xiàn)嘛,小笨蛋,難得是要把驅(qū)動(dòng)程序全部都分類分名字管理起來(lái),同時(shí)給你的6個(gè)函數(shù)提供接口,這就需要引入設(shè)備驅(qū)動(dòng)框架的偉大概念了,通過(guò)注冊(cè)的方式將驅(qū)動(dòng)程序加入到驅(qū)動(dòng)框架中,然后通過(guò)設(shè)備驅(qū)動(dòng)框架的接口進(jìn)行設(shè)備的操作,懂了吧?     小A還是依舊一臉懵逼。。。     小B講:你先不用理解,只要會(huì)用就可以了,后面以你的智商絕對(duì)可以看懂我的偉大理念,放心吧。      小A點(diǎn)點(diǎn)頭:好吧,那要怎樣做呢,你還是給我舉個(gè)例子吧,半個(gè)篇幅都是PPT,以后看著這些圖,我也搬不了磚啊。。。     小B滿腦子黑線,還真要送佛送到西啊。。。

         猿小B祭出珍藏多年的開(kāi)發(fā)板,對(duì)小A講,接下來(lái)讓我?guī)汔朔珗?chǎng)。

         小A:都這么牛叉了 你能不能不玩這么easy的開(kāi)發(fā)板。。。,要不還是講PPT吧。。。

        猿小B:請(qǐng)忽略這些不重要的細(xì)節(jié)。。。讓我?guī)沐塾蜶T-thread,設(shè)備層。。。哈哈哈,小A記住了,Linux的核心是shell,RTT的核心是finsh,原理上兩者是一個(gè)玩意兒,他不win老大,圖形化的輸出,所以你要學(xué)會(huì)和他溝通的語(yǔ)言,憑你的天賦 自學(xué)就OK了 。。。

       




0
回復(fù)
2019-08-20 15:03
@程序小白
         猿小B祭出珍藏多年的開(kāi)發(fā)板,對(duì)小A講,接下來(lái)讓我?guī)汔朔珗?chǎng)。        小A:都這么牛叉了你能不能不玩這么easy的開(kāi)發(fā)板。。。,要不還是講PPT吧。。。       猿小B:請(qǐng)忽略這些不重要的細(xì)節(jié)。。。讓我?guī)沐塾蜶T-thread,設(shè)備層。。。哈哈哈,小A記住了,Linux的核心是shell,RTT的核心是finsh,原理上兩者是一個(gè)玩意兒,他不win老大,圖形化的輸出,所以你要學(xué)會(huì)和他溝通的語(yǔ)言,憑你的天賦自學(xué)就OK了。。。       [圖片]

接下來(lái)需要檢查一下工程連接仿真是否正常,確保板子能找到仿真器(不然怎么玩):


0
回復(fù)
2019-08-20 15:06
@程序小白
接下來(lái)需要檢查一下工程連接仿真是否正常,確保板子能找到仿真器(不然怎么玩):[圖片]

在工程中,我們采用uart1作為finsh連接的端口,這里需要檢查一下開(kāi)發(fā)板是否能正常通過(guò)串口連接到電腦終端,以及正確的配置CRT參數(shù):

0
回復(fù)
2019-08-20 15:19
@程序小白
在工程中,我們采用uart1作為finsh連接的端口,這里需要檢查一下開(kāi)發(fā)板是否能正常通過(guò)串口連接到電腦終端,以及正確的配置CRT參數(shù):[圖片]
確保串口配置沒(méi)有問(wèn)題的情況下,打開(kāi)串口連接,并通過(guò)jlink燒錄RTT源碼,等待RTT啟動(dòng):

0
回復(fù)
2019-08-20 15:34
@程序小白
確保串口配置沒(méi)有問(wèn)題的情況下,打開(kāi)串口連接,并通過(guò)jlink燒錄RTT源碼,等待RTT啟動(dòng):[圖片][圖片][圖片]

     猿小A:這玩意兒搞起來(lái)是不是有些費(fèi)勁啊,一頓操作猛如虎,一看空蕩有如二百五,你整個(gè)空main來(lái)忽悠我。。。。


    猿小B:我還沒(méi)操作完你就打斷我。。。。RTT有個(gè)很好玩的地方,程序可以不放在main中一樣可以執(zhí)行:

來(lái)我給你刷新下三觀。。。

    猿小A:。。。

    猿小B:核心在這里,這個(gè)函數(shù)并沒(méi)有被放入main,但一樣可以執(zhí)行。。。兩個(gè)字,安排。。。




0
回復(fù)
2019-08-20 15:42
@程序小白
     猿小A:這玩意兒搞起來(lái)是不是有些費(fèi)勁啊,一頓操作猛如虎,一看空蕩有如二百五,你整個(gè)空main來(lái)忽悠我。。。。[圖片]   猿小B:我還沒(méi)操作完你就打斷我。。。。RTT有個(gè)很好玩的地方,程序可以不放在main中一樣可以執(zhí)行:來(lái)我給你刷新下三觀。。。   猿小A:。。。   猿小B:核心在這里,這個(gè)函數(shù)并沒(méi)有被放入main,但一樣可以執(zhí)行。。。兩個(gè)字,安排。。。[圖片][圖片]

猿小B:這里無(wú)法給你延時(shí)視頻,其實(shí)通過(guò)按鍵,改變了LED的輸出,同時(shí)通過(guò)finsh終端輸出相應(yīng)的信息,到目前為止其實(shí)有一點(diǎn)很神奇,我基本上沒(méi)有寫(xiě)任何代碼,就完成了一個(gè)簡(jiǎn)單功能的實(shí)現(xiàn),真正應(yīng)用時(shí),只需要講案例改為線程的方式就可以正常運(yùn)行了。

猿小A:amazing。。。

0
回復(fù)
2019-08-20 15:56
@程序小白
猿小B:這里無(wú)法給你延時(shí)視頻,其實(shí)通過(guò)按鍵,改變了LED的輸出,同時(shí)通過(guò)finsh終端輸出相應(yīng)的信息,到目前為止其實(shí)有一點(diǎn)很神奇,我基本上沒(méi)有寫(xiě)任何代碼,就完成了一個(gè)簡(jiǎn)單功能的實(shí)現(xiàn),真正應(yīng)用時(shí),只需要講案例改為線程的方式就可以正常運(yùn)行了。猿小A:amazing。。。[圖片][圖片]

猿小A :可是到目前為止都沒(méi)見(jiàn)你進(jìn)行過(guò)任何軟件的配置,明顯是拿一個(gè)現(xiàn)成的工程的演示。

猿小B: 這都被你發(fā)現(xiàn)了,哈哈,接下來(lái)看一下如何配置改功能的,這里只講和例子相關(guān)的pin的配置,系統(tǒng)的配置自學(xué)哈。

猿小A:。。。

這里主要用到工具ENV進(jìn)行工程的裁剪,GIT遠(yuǎn)程代碼更新下載,RTT有很多第三方源碼是被托管在服務(wù)器上的。

先看一下ENV的menuconfig功能:


0
回復(fù)
2019-08-20 16:33
@程序小白
猿小A:可是到目前為止都沒(méi)見(jiàn)你進(jìn)行過(guò)任何軟件的配置,明顯是拿一個(gè)現(xiàn)成的工程的演示。猿小B:這都被你發(fā)現(xiàn)了,哈哈,接下來(lái)看一下如何配置改功能的,這里只講和例子相關(guān)的pin的配置,系統(tǒng)的配置自學(xué)哈。猿小A:。。。這里主要用到工具ENV進(jìn)行工程的裁剪,GIT遠(yuǎn)程代碼更新下載,RTT有很多第三方源碼是被托管在服務(wù)器上的。先看一下ENV的menuconfig功能:[圖片][圖片][圖片]

猿小A : 接下來(lái)請(qǐng)開(kāi)始你的SHOW TIME...

猿小B : 。。。好吧。。。

首選要選擇芯片的型號(hào),這個(gè)是必須要配置的,likethis:

默認(rèn)GPIO功能是開(kāi)啟的:

打開(kāi)軟件包,加載相應(yīng)的sample軟件包:

0
回復(fù)
2019-08-21 08:19
@程序小白
猿小A:接下來(lái)請(qǐng)開(kāi)始你的SHOWTIME...猿小B:。。。好吧。。。首選要選擇芯片的型號(hào),這個(gè)是必須要配置的,likethis:[圖片]默認(rèn)GPIO功能是開(kāi)啟的:[圖片]打開(kāi)軟件包,加載相應(yīng)的sample軟件包:[圖片]

猿小B:萬(wàn)事俱備,只差scons 生成并變異整個(gè)工程,這里可以選擇MDK或者IAR看使用習(xí)慣了。

猿小A: 從頭到尾你講了一個(gè)demo,居然要如此復(fù)雜。。。

猿小B:雖然講的是demo,但是后面開(kāi)發(fā)項(xiàng)目你需要用相同的步驟流程,不要老想著demo。。。

0
回復(fù)
2019-08-21 09:10
@程序小白
猿小B:萬(wàn)事俱備,只差scons生成并變異整個(gè)工程,這里可以選擇MDK或者IAR看使用習(xí)慣了。猿小A:從頭到尾你講了一個(gè)demo,居然要如此復(fù)雜。。。猿小B:雖然講的是demo,但是后面開(kāi)發(fā)項(xiàng)目你需要用相同的步驟流程,不要老想著demo。。。[圖片][圖片]

            猿小B:接下來(lái)啟動(dòng)最核心的部分,設(shè)備驅(qū)動(dòng)框架分析,先從第一個(gè)部分開(kāi)始,那就是pin設(shè)備,MCU都有的設(shè)備,STM32俗稱GPIO,全稱就不展開(kāi)了,這里記住IO設(shè)備管理器給APP層提供的6個(gè)接口驅(qū)動(dòng)函數(shù):

            rt_pin_mode()        //設(shè)置引腳模式

            rt_pin_write()         //設(shè)置引腳電平

            rt_pin_read()          //讀取引腳電平

            rt_pin_attach_irq()  //綁定引腳中斷回調(diào)函數(shù)

            rt_pin_irq_enable()  //使能引腳中斷

            rt_pin_detach_irq() //脫離引腳中斷回調(diào)函數(shù)

引腳在使用的時(shí)候 ,需要提供引腳編號(hào),RTT有個(gè)很逆天的地方,內(nèi)部做了一個(gè)引腳號(hào)編碼表,就是將你能看到的MCU腿的硬件編號(hào)對(duì)應(yīng)到了相應(yīng)的引腳上,例如原來(lái)你寫(xiě)程序時(shí)用到2號(hào)腳,但是真正對(duì)2號(hào)的初始化,時(shí)根據(jù)GPIO的定義來(lái),例如PA2,但現(xiàn)在不用了,輸入引腳編號(hào),碼表會(huì)自動(dòng)找到對(duì)應(yīng)的引腳。你需要知道的就是硬件的引腳編號(hào):


猿小B:括號(hào)內(nèi)的42就是我們需要的,不用再關(guān)注那是PA9還是XXX...

猿小A : 這個(gè)我喜歡。。。


0
回復(fù)
2019-08-21 09:26
@程序小白
            猿小B:接下來(lái)啟動(dòng)最核心的部分,設(shè)備驅(qū)動(dòng)框架分析,先從第一個(gè)部分開(kāi)始,那就是pin設(shè)備,MCU都有的設(shè)備,STM32俗稱GPIO,全稱就不展開(kāi)了,這里記住IO設(shè)備管理器給APP層提供的6個(gè)接口驅(qū)動(dòng)函數(shù):           rt_pin_mode()       //設(shè)置引腳模式           rt_pin_write()        //設(shè)置引腳電平           rt_pin_read()         //讀取引腳電平           rt_pin_attach_irq() //綁定引腳中斷回調(diào)函數(shù)           rt_pin_irq_enable() //使能引腳中斷           rt_pin_detach_irq()//脫離引腳中斷回調(diào)函數(shù)引腳在使用的時(shí)候,需要提供引腳編號(hào),RTT有個(gè)很逆天的地方,內(nèi)部做了一個(gè)引腳號(hào)編碼表,就是將你能看到的MCU腿的硬件編號(hào)對(duì)應(yīng)到了相應(yīng)的引腳上,例如原來(lái)你寫(xiě)程序時(shí)用到2號(hào)腳,但是真正對(duì)2號(hào)的初始化,時(shí)根據(jù)GPIO的定義來(lái),例如PA2,但現(xiàn)在不用了,輸入引腳編號(hào),碼表會(huì)自動(dòng)找到對(duì)應(yīng)的引腳。你需要知道的就是硬件的引腳編號(hào):[圖片]猿小B:括號(hào)內(nèi)的42就是我們需要的,不用再關(guān)注那是PA9還是XXX...猿小A:這個(gè)我喜歡。。。

        猿小B:接下來(lái)我們來(lái)看一下這六個(gè)接口的內(nèi)部實(shí)現(xiàn),首先先看一下他在哪個(gè)文件中定義,這對(duì)理解設(shè)備管理框架的層的概念很有幫助。。。

                  

這里的重點(diǎn)是 _hw_pin.ops,而這個(gè)對(duì)象的賦值居然在register中,這就引出了 設(shè)備驅(qū)動(dòng)程序到設(shè)備管理框架的注冊(cè)機(jī)制了。

        

                   

0
回復(fù)
2019-08-21 09:46
@程序小白
       猿小B:接下來(lái)我們來(lái)看一下這六個(gè)接口的內(nèi)部實(shí)現(xiàn),首先先看一下他在哪個(gè)文件中定義,這對(duì)理解設(shè)備管理框架的層的概念很有幫助。。。                  [圖片]這里的重點(diǎn)是_hw_pin.ops,而這個(gè)對(duì)象的賦值居然在register中,這就引出了設(shè)備驅(qū)動(dòng)程序到設(shè)備管理框架的注冊(cè)機(jī)制了。        [圖片]                  

        猿小A : 有一點(diǎn)明朗了,也就是說(shuō)APP通過(guò)設(shè)備驅(qū)動(dòng)框架使用之前,必須先將設(shè)備驅(qū)動(dòng)注冊(cè)到設(shè)備驅(qū)動(dòng)框架之中吧?那在哪里register的呢?

        猿小B : 你上道挺快嘛?看來(lái)功底不差,你所說(shuō)的都是對(duì)的,接下來(lái)我們來(lái)看下,這個(gè)register函數(shù)在哪里調(diào)用,這里面有一個(gè)最大的關(guān)鍵點(diǎn),后面再說(shuō)。。。

        猿小A : 又賣(mài)關(guān)子。。。

        真正的register來(lái)自于這里:

0
回復(fù)
2019-08-21 09:55
@程序小白
        猿小A:有一點(diǎn)明朗了,也就是說(shuō)APP通過(guò)設(shè)備驅(qū)動(dòng)框架使用之前,必須先將設(shè)備驅(qū)動(dòng)注冊(cè)到設(shè)備驅(qū)動(dòng)框架之中吧?那在哪里register的呢?       猿小B:你上道挺快嘛?看來(lái)功底不差,你所說(shuō)的都是對(duì)的,接下來(lái)我們來(lái)看下,這個(gè)register函數(shù)在哪里調(diào)用,這里面有一個(gè)最大的關(guān)鍵點(diǎn),后面再說(shuō)。。。       猿小A:又賣(mài)關(guān)子。。。       真正的register來(lái)自于這里:[圖片]

猿小A : 有點(diǎn)明白了,也就是register在真正的設(shè)備驅(qū)動(dòng)程序中進(jìn)行了注冊(cè),將設(shè)備驅(qū)動(dòng)程序與設(shè)備管理框架真正的聯(lián)系了起來(lái),從應(yīng)用開(kāi)發(fā)的角度整個(gè)過(guò)程分為三層:   APP層:main.c

         設(shè)備驅(qū)動(dòng)管理框架層:/DeviceDrivers/pin.c

         設(shè)備驅(qū)動(dòng)層:/Drivers/drv_gpio.c

整體的構(gòu)造還是蠻新奇的。。。

猿小B :不錯(cuò)嘛,省的我多費(fèi)口舌了,你居然全看明白了,那么我要說(shuō)的是,真正從我們攻城獅開(kāi)發(fā)的角度上,設(shè)備管理層,設(shè)備驅(qū)動(dòng)層都是現(xiàn)成的不需要我們進(jìn)行開(kāi)發(fā),最關(guān)鍵的是register行為是程序自動(dòng)加載的不需要我們手動(dòng)注冊(cè),從頭到尾對(duì)設(shè)備的操作只需要關(guān)注那六個(gè)接口函數(shù)就OK了,是不是很神奇,哈哈。。。

猿小A : 你指的是這里吧,INIT_BOARD_EXPORT(rt_hw_pin_init);

猿小B 目瞪口呆:這你也懂。。。。

猿小A : 我就這句看不懂,想必你說(shuō)的不需要手動(dòng)注冊(cè)的實(shí)現(xiàn)在這里,我猜。。。

猿小B ,吐血。。。

0
回復(fù)
2019-08-21 10:15
@程序小白
猿小A:有點(diǎn)明白了,也就是register在真正的設(shè)備驅(qū)動(dòng)程序中進(jìn)行了注冊(cè),將設(shè)備驅(qū)動(dòng)程序與設(shè)備管理框架真正的聯(lián)系了起來(lái),從應(yīng)用開(kāi)發(fā)的角度整個(gè)過(guò)程分為三層:  APP層:main.c        設(shè)備驅(qū)動(dòng)管理框架層:/DeviceDrivers/pin.c        設(shè)備驅(qū)動(dòng)層:/Drivers/drv_gpio.c整體的構(gòu)造還是蠻新奇的。。。猿小B:不錯(cuò)嘛,省的我多費(fèi)口舌了,你居然全看明白了,那么我要說(shuō)的是,真正從我們攻城獅開(kāi)發(fā)的角度上,設(shè)備管理層,設(shè)備驅(qū)動(dòng)層都是現(xiàn)成的不需要我們進(jìn)行開(kāi)發(fā),最關(guān)鍵的是register行為是程序自動(dòng)加載的不需要我們手動(dòng)注冊(cè),從頭到尾對(duì)設(shè)備的操作只需要關(guān)注那六個(gè)接口函數(shù)就OK了,是不是很神奇,哈哈。。。猿小A:你指的是這里吧,INIT_BOARD_EXPORT(rt_hw_pin_init);猿小B目瞪口呆:這你也懂。。。。猿小A:我就這句看不懂,想必你說(shuō)的不需要手動(dòng)注冊(cè)的實(shí)現(xiàn)在這里,我猜。。。猿小B,吐血。。。

猿小B : 你不要把重點(diǎn)放在實(shí)現(xiàn)的原理上, 而是要把精力放在應(yīng)用上,這才是攻城獅的核心。。。

猿小A : 說(shuō)實(shí)話這種應(yīng)用方式太簡(jiǎn)單了,基本看一遍再照葫蘆畫(huà)個(gè)瓢就會(huì)了,總得給自己找點(diǎn)事情做,不然怎么聽(tīng)你長(zhǎng)篇闊論的。

猿小B : 。。。算了不和你一般見(jiàn)識(shí)了,既然是設(shè)備應(yīng)用的主題,還是回到主題上把那六個(gè)API仔細(xì)講解下,就收尾吧。

1.設(shè)置引腳模式: void rt_pin_mode(rt_base_t pin,rt_base_t mode);

參數(shù):                                                    描述:

pin                                                          引腳編號(hào)

mode                                                      引腳工作模式

#define PIN_MODE_OUTPUT          0X00        /*輸出*/

#define PIN_MODE_INPUT             0X01        /*輸入*/

#define PIN_MODE_PULLUP           0X02        /*上拉輸入*/

#define PIN_MODE_PULLDOWN      0X03        /*下拉輸入*/

#define PIN_MODE_OUTPU_OD      0X04        /*開(kāi)漏輸出*/

2.設(shè)置引腳電平: void rt_pin_write(rt_base_t pin,rt_base_t value);

參數(shù):                                                      描述:

pin                                                            引腳編號(hào)

value                                                         電平邏輯值,可取2種宏定義值之一;PIN_LOW低電平,PIN_HIGH高電平;

3.讀取引腳電平:int rt_pin_read(rt_base_t pin);

參數(shù):                                                       描述:

pin                                                             引腳編號(hào)

返回                                                            ------------

PIN_LOW                                                    低電平

PIN_HIGH                                                    高電平

還有仨放到下一個(gè)帖子,有時(shí)候長(zhǎng)了也容易發(fā)布了,那就杯具了。。。

0
回復(fù)
2019-08-21 10:36
@程序小白
猿小B:你不要把重點(diǎn)放在實(shí)現(xiàn)的原理上,而是要把精力放在應(yīng)用上,這才是攻城獅的核心。。。猿小A:說(shuō)實(shí)話這種應(yīng)用方式太簡(jiǎn)單了,基本看一遍再照葫蘆畫(huà)個(gè)瓢就會(huì)了,總得給自己找點(diǎn)事情做,不然怎么聽(tīng)你長(zhǎng)篇闊論的。猿小B:。。。算了不和你一般見(jiàn)識(shí)了,既然是設(shè)備應(yīng)用的主題,還是回到主題上把那六個(gè)API仔細(xì)講解下,就收尾吧。1.設(shè)置引腳模式:voidrt_pin_mode(rt_base_tpin,rt_base_tmode);參數(shù):                                                   描述:pin                                                        引腳編號(hào)mode                                                    引腳工作模式#definePIN_MODE_OUTPUT         0X00       /*輸出*/#definePIN_MODE_INPUT            0X01       /*輸入*/#definePIN_MODE_PULLUP          0X02       /*上拉輸入*/#definePIN_MODE_PULLDOWN     0X03       /*下拉輸入*/#definePIN_MODE_OUTPU_OD     0X04       /*開(kāi)漏輸出*/2.設(shè)置引腳電平:voidrt_pin_write(rt_base_tpin,rt_base_tvalue);參數(shù):                                                     描述:pin                                                           引腳編號(hào)value                                                        電平邏輯值,可取2種宏定義值之一;PIN_LOW低電平,PIN_HIGH高電平;3.讀取引腳電平:intrt_pin_read(rt_base_tpin);參數(shù):                                                     描述:pin                                                            引腳編號(hào)返回                                                           ------------PIN_LOW                                                   低電平PIN_HIGH                                                   高電平還有仨放到下一個(gè)帖子,有時(shí)候長(zhǎng)了也容易發(fā)布了,那就杯具了。。。

猿小B:繼續(xù)講完剩下的三個(gè)API

4.綁定引腳中斷回調(diào)函數(shù):rt_err_t rt_pin_attach_irq(rt_int32_t pin,rt_uint32_t mode,

                                                                            void(*hdr)(void*args),void *args);

參數(shù):                                                 描述

pin                                                      引腳編號(hào)

mode                                                  中斷觸發(fā)模式

hdr                                                     中斷回調(diào)函數(shù),用戶需要自行定義這個(gè)函數(shù)

args                                                     中斷回調(diào)函數(shù)的參數(shù),不需要時(shí)設(shè)置為RT_NULL

返回                                                    ——————————

RT_EOK                                               綁定成功

錯(cuò)誤碼                                                  綁定失敗

——————————————————————————

mode選擇:

#define PIN_IRQ_MODE_RISING                0X00/*上升沿觸發(fā)*/

#define PIN_IRQ_MODE_FALLING              0X01/*下降沿觸發(fā)*/

#define PIN_IRQ_MODE_RISING_FALLING   0X02/*上下邊沿觸發(fā)*/

#define PIN_IRQ_MODE_HIGH_LEVEL         0X03/*高電平觸發(fā)*/

#define PIN_IRQ_MODE_LOW_LEVEL         0X04/*低電平觸發(fā)*/

5.引腳終端使能:rt_err_t rt_pin_irq_enable(rt_base_t pin,rt_uint32_t enabled);

參數(shù):                                                  描述:

pin                                                        引腳編號(hào)

enabled                                                 狀態(tài),PIN_IRQ_ENABLE(開(kāi)啟) ,PIN_IRQ_ENABLE(關(guān)閉)

返回                                                     ——————————————————————

RT_EOK                                                使能成功

錯(cuò)誤碼                                                  使能失敗

6.脫離引腳中斷回調(diào)函數(shù): rt_err_t rt_pin_detach_irq(rt_int32_t pin);

參數(shù):                                                    描述:

pin                                                          引腳編號(hào)

返回                                                        ——————————————

RT_EOK                                                  脫離成功

錯(cuò)誤碼                                                    脫離失敗

猿小B:到這里API介紹全部完畢,完全手打我再加深一下印象,這里有一點(diǎn)要注意,在RTT中程序的執(zhí)行只有兩種上下文環(huán)境,一種是中斷,一種是線程,這里并沒(méi)有出現(xiàn)任何線程相關(guān)的內(nèi)容,所以中斷回調(diào)函數(shù)應(yīng)該是在中斷上下文中,喜歡delay的筒子們注意了。

猿小A:我說(shuō)你一張圖能搞定的非要手打不嫌累呢。。。不過(guò)關(guān)于上下文環(huán)境是個(gè)值得深思的問(wèn)題。

猿小B:。。。

0
回復(fù)
2019-08-21 10:45
@程序小白
猿小B:繼續(xù)講完剩下的三個(gè)API4.綁定引腳中斷回調(diào)函數(shù):rt_err_trt_pin_attach_irq(rt_int32_tpin,rt_uint32_tmode,                                                                           void(*hdr)(void*args),void*args);參數(shù):                                                描述pin                                                     引腳編號(hào)mode                                                中斷觸發(fā)模式hdr                                                   中斷回調(diào)函數(shù),用戶需要自行定義這個(gè)函數(shù)args                                                   中斷回調(diào)函數(shù)的參數(shù),不需要時(shí)設(shè)置為RT_NULL返回                                                   ——————————RT_EOK                                              綁定成功錯(cuò)誤碼                                                 綁定失敗——————————————————————————mode選擇:#definePIN_IRQ_MODE_RISING               0X00/*上升沿觸發(fā)*/#definePIN_IRQ_MODE_FALLING             0X01/*下降沿觸發(fā)*/#definePIN_IRQ_MODE_RISING_FALLING  0X02/*上下邊沿觸發(fā)*/#definePIN_IRQ_MODE_HIGH_LEVEL        0X03/*高電平觸發(fā)*/#definePIN_IRQ_MODE_LOW_LEVEL        0X04/*低電平觸發(fā)*/5.引腳終端使能:rt_err_trt_pin_irq_enable(rt_base_tpin,rt_uint32_tenabled);參數(shù):                                                 描述:pin                                                       引腳編號(hào)enabled                                               狀態(tài),PIN_IRQ_ENABLE(開(kāi)啟),PIN_IRQ_ENABLE(關(guān)閉)返回                                                    ——————————————————————RT_EOK                                               使能成功錯(cuò)誤碼                                                 使能失敗6.脫離引腳中斷回調(diào)函數(shù):rt_err_trt_pin_detach_irq(rt_int32_tpin);參數(shù):                                                   描述:pin                                                         引腳編號(hào)返回                                                       ——————————————RT_EOK                                                 脫離成功錯(cuò)誤碼                                                  脫離失敗猿小B:到這里API介紹全部完畢,完全手打我再加深一下印象,這里有一點(diǎn)要注意,在RTT中程序的執(zhí)行只有兩種上下文環(huán)境,一種是中斷,一種是線程,這里并沒(méi)有出現(xiàn)任何線程相關(guān)的內(nèi)容,所以中斷回調(diào)函數(shù)應(yīng)該是在中斷上下文中,喜歡delay的筒子們注意了。猿小A:我說(shuō)你一張圖能搞定的非要手打不嫌累呢。。。不過(guò)關(guān)于上下文環(huán)境是個(gè)值得深思的問(wèn)題。猿小B:。。。

猿小B:到這里基本我想表達(dá)的都講完了,怎么樣,你有沒(méi)有什么想法,小A同學(xué)。

猿小A : 首先同學(xué)的稱呼是不對(duì)的,叫A總好了,你的想法和整個(gè)構(gòu)架說(shuō)實(shí)話還是很給我震撼的,尤其是在多對(duì)多映射的方式,通過(guò)底層注冊(cè)的方式去實(shí)現(xiàn),我還是蠻驚喜的,又學(xué)到了一些知識(shí),后面我可以采用這種方式自己開(kāi)發(fā)一下驅(qū)動(dòng)程序。這種開(kāi)發(fā)方式還是蠻新穎的,我覺(jué)得后面我考慮試一下。

猿小B : 讓你理解應(yīng)用,你卻去搞原理,這種項(xiàng)目可是付費(fèi)的,我費(fèi)盡千心萬(wàn)苦研究的,你一句話看懂了就學(xué)會(huì)了,要賠錢(qián)。。。

猿小A : 好啦,不要這么小氣,中午請(qǐng)你吃個(gè)雞腿好了。。。

猿小B : emmm。。。這還差不多,哈哈,這篇就到這里吧,下一篇看看講講的別外設(shè),不要再透過(guò)應(yīng)用,研究原理了,這么下去我講的都試著心驚膽戰(zhàn)的。。。還沒(méi)做好的蛋糕,你卻拿去開(kāi)店了,多傷人。。。

猿小A : 我。。。我盡量。。嘿嘿。。。sayonara。。。

0
回復(fù)
kfjy2
LV.4
23
2019-08-21 11:04
強(qiáng)勢(shì)占樓
0
回復(fù)
2019-08-21 11:06
@kfjy2
強(qiáng)勢(shì)占樓
歡迎歡迎。。。
0
回復(fù)
jlh213
LV.6
25
2019-08-21 14:22
@程序小白
歡迎歡迎。。。
盡管你寫(xiě)的不錯(cuò),可是我依舊一臉懵B~~不過(guò),頂你!
0
回復(fù)
2019-08-21 15:40
@jlh213
盡管你寫(xiě)的不錯(cuò),可是我依舊一臉懵B~~不過(guò),頂你!
摸摸大
0
回復(fù)
發(fā)