一些經(jīng)典排序算法(python實現(xiàn))

姓名:閔聿寬

學號:16020188028

轉自:https://zhuanlan.zhihu.com/p/46722567

【嵌牛導讀】排序算法在各種硬件學習中都有著十分廣泛的應用,接下來我們就來看看排序算法在python中的實現(xiàn)

【嵌牛鼻子】python 排序算法

【嵌牛提問】有哪些排序算法舌仍?它們的原理是什么鳖孤?它們是怎樣實現(xiàn)的?

【嵌牛正文】

引言

作為一個算是合格的驅動工程師抡笼,總是有很多話想說苏揣。代碼看的多了總是有些小感悟⊥埔觯可能是吧平匈。那就總結一下自己看的代碼的一些感悟和技巧。如何利用你看的這些代碼?如何體現(xiàn)在工作的調試中增炭?

作為驅動工程師忍燥,主要的工作就是移植各種驅動,接觸各種硬件隙姿。接觸最多的就是dts梅垄、中斷、gpio输玷、sysfs队丝、proc fs。如何利用sysfs欲鹏、proc fs及內核提供的接口為我們降低調試難度机久,快速解決問題呢?

如何利用dts赔嚎?

首先我們關注的主要是兩點膘盖,gpio和irq。其他的選擇忽略尤误。先展示一下我期望的gpio和irq的使用方法侠畔。dts如下:

device { rst-gpio = <&gpioc_ctl 10 OF_GPIO_ACTIVE_LOW>; irq-gpio = <&gpioc_ctl 11 0>; interrupts-extended = <&vic 11 IRQF_TRIGGER_RISING>; }; }

對于以上的dts你應該再熟悉不過,當然這里不是教你如何使用dts损晤,而是關注gpio和irq最后一個數(shù)字可以如何利用软棺。

例如rst-gpio的OF_GPIO_ACTIVE_LOW代表什么意思呢?可以理解為低有效沉馆。什么意思呢码党?舉個例子德崭,正常情況下斥黑,我們需要一個gpio口控制燈,我們認為燈打開就是active狀態(tài)眉厨。

對于一個程序員來說锌奴,我們可以封裝一個函數(shù),寫1就是打開燈憾股,寫0就是關燈鹿蜀。但是對于硬件來說,變化的是gpio口的電平狀態(tài)服球。如果gpio輸出高電平燈亮茴恰,那么這就是高有效。如果硬件設計是gpio輸出低電平燈亮斩熊,那么就是低有效往枣。對于一個軟件工程師來說,我們的期望是寫1就是亮燈,寫0就是關燈分冈。

我可不管硬件工程師是怎么設計的圾另。我們可以認為dts是描述具體的硬件。因此對于驅動來說雕沉,硬件的這種變化集乔,只需要修改dts即可。軟件不用任何修改坡椒。軟件可以如下實現(xiàn)扰路。

int device_probe(struct platform_device *pdev) { rst_gpio = of_get_named_gpio_flags(np, "rst-gpio", 0, &flags); if (flags & OF_GPIO_ACTIVE_LOW) { struct gpio_desc *desc; desc = gpio_to_desc(rst_gpio); set_bit(FLAG_ACTIVE_LOW, &desc->flags); } irq = of_irq_get(np, 0); trigger_type = irq_get_trigger_type(irq); request_threaded_irq(irq, NULL, irq_handler, trigger_type, "irq", NULL); }

驅動按照以上代碼實現(xiàn)的話,如果修改中斷觸發(fā)類型或者電平有效狀態(tài)只需要修改dts即可肠牲。例如不同的IC復位電平是不一樣的幼衰,有的IC是高電平復位,有的IC卻是低電平復位缀雳。其實這就是一個電平有效狀態(tài)的例子渡嚣。

如何調試gpio?

移植驅動階段或者調試階段的工程中肥印,難免想知道當前gpio的電平狀態(tài)识椰。當然很easy。萬用表戳上去不就行了深碱。是案桂摹!硬件工程師的思維敷硅。作為軟件工程師自然是要軟件的方法功咒。下面介紹兩個api接口。自己摸索使用吧绞蹦。點到為止力奋。

static inline int gpio_export(unsigned gpio, bool direction_may_change); static inline int gpio_export_link(struct device *dev, const char *name, unsigned gpio);

在你的driver中調用以上api后,編譯下載幽七。去/sys/class/gpio目錄看看有什么發(fā)現(xiàn)景殷。

如何調試irq?

調試的時候也難免會確定硬件是否產(chǎn)生中斷澡屡。我們該怎么辦呢猿挚?也很easy。

cat /proc/interrupts

輸出信息不想多余的介紹驶鹉〖撸看代碼去。根據(jù)輸出的irq num室埋,假設是irq_num办绝。請進入以下目錄踏兜。看看下面都有什么文件八秃。摸索這些文件可以為你調試帶來哪些方便碱妆。

cd /proc/irq/irq_num

dts和sysfs有什么關聯(lián) ?

曾經(jīng)寫過一篇dts解析的文章http://www.wowotech.net/device_model/dt-code-file-struct-parse.html昔驱。最后一節(jié)其實說了一個很有意思的東西疹尾。但是僅僅是寥寥結尾。并沒有展開骤肛。因為他不關乎我寫的文章的的主題纳本。但是,他卻和調試息息相關腋颠。

cd /sys/firmware/devicetree/base

該目錄的信息就是整個dts繁成。將整個dts的節(jié)點以及屬性全部展現(xiàn)在sysfs中。他對我們的調試有什么用呢淑玫?Let me tell you巾腕。如果你的項目非常的復雜,例如一套代碼兼容多種硬件配置絮蒿。這些硬件配置的差異信息主要是依靠dts進行區(qū)分尊搬。當編譯kernel的時候,你發(fā)現(xiàn)你很難確定就是你用的是哪個dts土涝》鹗伲可能你就會憑借自己多年的工作經(jīng)驗去猜測。

是的但壮,你的經(jīng)驗很厲害冀泻。但是,如何確定你的dts信息是否添加到kernel使用的dts呢蜡饵?我覺得你應該got it弹渔。就到這個目錄去查找是否包含你添加的ndoe和property。dts中有status屬性可以設置某個devicec是否使能验残。當你發(fā)現(xiàn)你的driver的probe沒有執(zhí)行的時候捞附,我覺得你就需要確定一遍status是不是“ok”巾乳、“okay”或者沒有這個屬性您没。

遠不止我所說的這個功能,還可以判斷當前的硬件是匹配哪個dts文件胆绊。你還不去探索一波源碼的設計與實現(xiàn)嗎氨鹏?節(jié)點為什么出現(xiàn)在某些目錄?為什么有些節(jié)點的屬性cat卻是亂碼压状?就是亂碼仆抵,你沒看錯跟继。至于為什么。點到為止镣丑。

sysfs可以看出什么貓膩舔糖?

sysfs有什么用?sysfs可以看出device是否注冊成功莺匠、存在哪些device金吗、driver是否注冊、device和driver是都匹配趣竣、device匹配的driver是哪個等等摇庙。先說第一項技能。deivce是否注冊遥缕。

就以i2c設備為例說明卫袒。/sys/bus/i2c/devices該目錄下面全是i2c總線下面的devices。如何確定自己的device是否注冊呢单匣?首選你需要確定自己的device掛接的總線是哪個i2c(i2c0, i2c1...)夕凝。假設設備掛接i2c3,從地址假設0x55户秤。那么devices目錄只需要查看是否有3-0055目錄即可迹冤。

如何確定device是否匹配了驅動?

進入3-0055目錄虎忌,其實你可以看到driver的符號鏈接泡徙。如果沒有,那么就是沒有driver膜蠢。driver是否注冊如何確定呢堪藐?方法類似。/sys/bus/i2c/drivers目錄就是所有注冊的i2c driver挑围。方法如上礁竞。不再列舉。

你以為就這些簡單的功能了嗎杉辙?其實不是模捂,還有很多待你探討。主要是各種目錄之間的關系蜘矢,device注冊會出現(xiàn)什么目錄狂男?那么driver呢?各種符號鏈接會在那些目錄品腹?等等岖食。

如何排查driver的probe沒有執(zhí)行問題?

我想這類問題是移植過程中極容易出現(xiàn)的第一個攔路虎舞吭。這里需要聲明一點泡垃∥錾海可能有些驅動工程師認為probe沒有執(zhí)行就是driver沒有注冊成功。其實這兩個沒有半毛錢關系蔑穴。probe是否執(zhí)行只和device和driver的是否匹配成功有關忠寻。我們有什么思路排查這類問題呢?主要排查方法可以如下存和。

如果發(fā)現(xiàn)device沒有注冊锡溯,如何確定問題。首先通過sysfs中dts展開文件查看是否有你添加的device信息哑姚。如果沒有的話祭饭,沒有device注冊就是正常的,去找到正確的dts添加正確的device信息叙量。如果發(fā)現(xiàn)sysfs有device的dts信息倡蝙。那么就看看status屬性的值是不是ok的。

如果也是ok的绞佩。那么就非常奇怪了寺鸥。這種情況一般出現(xiàn)在kernel的device注冊路徑出錯了。曾經(jīng)就有一個小伙伴提出問題品山,現(xiàn)象就是這樣胆建。最后我?guī)退_定問題原因是dts章reg屬性的地址是0xc0。這是一個大于0x7f的值肘交。在i2c總線注冊驅動的時候會解析當前總線下的所有device笆载。然后注冊所有的從設備。就是這里的地址檢查出了問題涯呻,因此這個device沒有注冊上凉驻。

如果發(fā)現(xiàn)driver沒有注冊,那么去看看對應的Makefile是否參與編譯复罐。如果參與了編譯涝登,就查看log信息,是不是驅動注冊的時候有錯誤信息效诅。

最后一點的compatible屬性的值只需要cat一下胀滚,然后compare即可, 不多說。

后記

sysfs還有很多的其他的調試信息可以查看乱投。因此咽笼,我建議驅動工程師都應該掌握sysfs的使用和原理〈垭纾看看代碼實現(xiàn)褐荷。我始終堅信只有更好地掌握技術的原理才能更好地利用技術勾效。

文章內容不想展開嘹悼。我告訴你的結果叛甫,你永遠記憶不深刻,而且我說的也不一定對杨伙。還是需要自己專研其监。我只是給你指條明路,剩下的就需要自己去走限匣。最后說一句抖苦,代碼不會騙你,還會告訴你別人不能告訴你的米死。

-完-

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末峦筒,一起剝皮案震驚了整個濱河市物喷,隨后出現(xiàn)的幾起案子峦失,更是在濱河造成了極大的恐慌尉辑,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異昆庇,居然都是意外死亡闸溃,警方通過查閱死者的電腦和手機辉川,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門府蛇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屿愚,“玉大人,你說我怎么就攤上這事函匕≈严В” “怎么了抒寂?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵蓬推,是天一觀的道長沸伏。 經(jīng)常有香客問我毅糟,道長姆另,這世上最難降的妖魔是什么迹辐? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮殷费,結果婚禮上详羡,老公的妹妹穿的比我還像新娘实柠。我一直安慰自己,他們只是感情好钢拧,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布娶靡。 她就那樣靜靜地躺著,像睡著了一般伯铣。 火紅的嫁衣襯著肌膚如雪腔寡。 梳的紋絲不亂的頭發(fā)上放前,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音似扔,去河邊找鬼炒辉。 笑死泉手,一個胖子當著我的面吹牛斩萌,可吹牛的內容都是我干的术裸。 我是一名探鬼主播袭艺,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼瘤睹,長吁一口氣:“原來是場噩夢啊……” “哼驴党!你這毒婦竟也來了获茬?” 一聲冷哼從身側響起鹏氧,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎吊履,沒想到半個月后艇炎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冕臭,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年暇榴,在試婚紗的時候發(fā)現(xiàn)自己被綠了蔼紧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奸例。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡谐区,死狀恐怖昭抒,靈堂內的尸體忽然破棺而出灭返,到底是詐尸還是另有隱情婆殿,我是刑警寧澤怕磨,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站捞高,受9級特大地震影響硝岗,放射性物質發(fā)生泄漏。R本人自食惡果不足惜胀溺,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一腰吟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧倍啥,春花似錦蒲稳、人聲如沸江耀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昵观。三九已至,卻和暖如春舌稀,著一層夾襖步出監(jiān)牢的瞬間啊犬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工壁查, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留觉至,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓睡腿,卻偏偏與公主長得像语御,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子席怪,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內容