1. 程式人生 > >【轉】致青春 FROM:一隻嵌入式行業摸爬滾打數十載的老鳥

【轉】致青春 FROM:一隻嵌入式行業摸爬滾打數十載的老鳥

致青春 FROM:一隻嵌入式行業摸爬滾打數十載的老鳥
時間:2018-03-22 來源:網際網路 作者: 標籤:工程師 嵌入式 FPGA
作為一名在嵌入式行業摸爬滾打許久的老鳥,回想自己的經歷之路,那麼漫長可又彷彿近在眼前。——此文僅獻給那些剛剛踏上硬體之路和還在徘徊的同學們,在此我簡要的記錄了我的學習經歷和其間自己所獲的一些心得,以幫助初學者少走彎路。當然,如果你覺得深有感觸的話,這邊也可以私我:
本文引用地址: http://www.21ic.com/chongdian/zhenxin/2018-03-22/754969.html
我深知對於一個初學者來說,身邊有一個能手把手相授的老師該是多麼幸福的事情,老師一句不經意的話可能我們初學者要花上幾天甚至是幾個月的時間去思考和驗證。遺憾的是,我們身邊並非總有這麼一位老師。所幸的是而今網路發達,這致使我們不得不經常求助於網路,網路上豐富的個人經驗是非常值得借鑑的,我們能從一些文章中悟出一些東西,為我所用,或者從中感受精神動力。

藉此機會我想介紹一下我曾經的工作團隊,因為他們對我影響極大。團隊有四個人,其一是擁有11年工作經驗且已擁有自己專利的高階工程師(我習慣叫他二導,他是我為什麼在團隊的原因),一個是擁有5年經驗、熱心腸的工程師,還有兩個分別是電源和視訊方面的專家和元老級人物。耳濡目染,自己漸漸的對硬體發生了濃厚的興趣。從微控制器,FPGA、SOPC硬體的搭建以及軟體程式設計,以及現在正在努力研究的ARM,我是憑著無限的熱情來做的。
但熱情不是唯一的原因,另一個原因是試驗室提供了便捷的學習環境。這裡有現成的winbond 51微控制器、有偉福模擬器、advanced labtool 48uxp萬能程式設計器,一臺12萬的示波器,自己買了個萬能板。學習階段時,找本書就能在上邊進行試驗了。從簡單的led閃爍、數碼管顯示、pwm到中斷、串列埠通訊(微控制器與微控制器通訊,微控制器與pc通訊)、I2Ceeprom讀寫、A/D轉換、溫度的測量等。當時令我神魂顛倒的是每一個試驗經過資料的查詢、程式的編寫以及除錯、再到後來問題的解決,那份成就感與喜悅之情,相信只有經歷過的人才能夠體會。正是有這份熱情和愛好,我常常在實驗室呆上十二、三小時,通常是晚飯在食堂吃了後直接到驗室,晚上9點半回宿舍。雖說那時候沒有做過什麼大專案,但是這每一個小小的實驗都是我知識積累過程中的點滴,有了這積累,之後我才能涉足更大的專案。
剛進實驗室的時候,二導就給了我一塊開發版,是Altera公司的nios ep1c20 cyclone系列開發板,當時是以大學計劃的名義買的,5000元人民幣。於是就開始了我的FPGA學習之路。之前學習過verilog,只停留在純粹的理論階段,編幾個小小的程式,用quartus-ii自帶的模擬軟體進行一下模擬就ok了。
用模擬軟體進行模擬,往往能夠得出你所想要的結果,但是一旦下載到晶片裡邊執行,問題就會接踵而至。萬事開頭難,我做的第一個實驗是點亮led,自己編寫程式(幾行而已)、編譯、引腳分配、模擬、然後就用jtag下載線連線開發板和pc,將sof檔案下載到晶片。現在想起來這是多麼簡單的幾個步驟,但是對於當時的我來說,花費了相當的時間和精力來查詢資料和埋頭反覆實驗。特別是引腳的分配,文件上只說需要這麼做,那為什麼要這麼做呢?當時沒有過多的想法,只想看到實驗的結果,有了結果我就有了無限的成就感和高漲的熱情,所以當經過努力,第一個FPGA實驗裡的led終於按照意圖動作的時候,那種激動與當初學習微控制器時得以實現led閃爍的情形如出一轍。
我做實驗的一個慣例同時也是一個經驗就是邊做實驗邊看書,在實驗中發現問題,遇到不懂的問題或者原理在查詢相關的文件。我習慣動手,如果讓我坐在實驗室看上1天的純理論書籍,而不讓動手試驗,我想我的腦袋肯定會爆炸,正因為沒有這樣看過書,所以這腦袋也一直健在。到後來學習ucos嵌入式作業系統我也採用了這個方法,我把它叫做“階梯成就感”(實在是寫這篇文章的時候突然覺得這個詞語非常貼切,臨時杜撰的)。抱著這種熱情,後來一點一點地深入學習FPGA,一些常規邏輯電路的設計,包括邏輯閘電路、資料選擇器、編譯碼器、加減乘除運算器、移位器,到後來的稍微複雜的電路設計,如FIFO、數字跑表、頻率計、狀態機、交通等的控制、卡式電話計費系統以及UART等。
這些試驗當時我都是採用的verilog語言實現的。初接觸FPGA時本想學VHDL,那時的同學都用verilog,為了與他們討論問題的方便,就改學verilog了。一學不打緊,慢慢發現自己深深地愛上了verilog,對於我來說,它無疑更適合我。這也是我要推薦的一個經驗,那就是多看看你周圍的人用的是什麼工具,他們用的工具往往不是你最喜歡的或者不是當前最廣泛最流行的,但你若要和他們交流討論問題,那還是遷就一下,和別人所用工具一樣,交流起來也會順暢方便。到實驗室後,因為實驗室的員工都用偉福的模擬器,所以軟體當然還是用偉福提供的。偉福的軟體我認為不怎麼好,只支援彙編,比起大名鼎鼎的keil c51遜了一大截,但除非你想等到自己有問題不會的時候周邊竟沒有人幫助你,不然在前期還是選擇偉福的軟體方便溝通。再後來,經過自己的摸索和向身邊的工程師們請教,偉福用很熟悉了,彙編也有了自己的一套,這時候我開始在偉福裡邊嵌入keil,用c語言來寫程式,但除錯的時候用偉福軟體還是有缺陷,比如不能夠單步執行等。所以再後來我就下載了keil c51軟體,從此以後便正式地在keil的開發介面下寫程式了。當然模擬的時候也可以在keil環境下用偉福模擬器,我想偉福在**自己產品的時候就已經考慮到這點了,他們的一些產品肯定要考慮相容主流軟體keil的。用了keil C51後就不想用偉福編譯軟體了,同樣的用了c寫程式後,就不想用匯編了。但是彙編是每一個硬體研發工程師們必備的,彙編有c不可企及之處,但有時候還非用匯編不可。彙編的執行效率高,寫起來很是煩瑣,煩瑣規煩瑣,在某些特定的時刻,彙編還是發揮了它不可替代的作用。比如在將usoc移植到微控制器的時候,與處理器相關的程式還真是必須用匯編來完成的。
再後來,學習sopc。從最小系統硬體平臺的搭建,到簡單的led閃爍程式的編寫,到sof檔案在晶片上跑起來,看著led的亮與滅,心中熱情澎湃。每一次接觸新知識都有一種發自內心的激動,每一次接觸的新東西我都從最簡單的led閃爍開始,從微控制器到FPGA到sopc再到ucos,每天一個小小的進步能讓我燃起對工作的熱情,只要有這每天小小的看得見的“階梯成就感”,就能激發我對更多知識的追求。在此期間本人比較欣賞Altera公司推出的可程式設計片上系統即sopc,它解放了我們搭建硬體系統的煩瑣,僅僅需要按照需求在系統裡邊加上自己的IP核和一些必須的外設。Altera公司或者其他的第三方公司已經為我們提供了效能和功能很完善的IP核,我們所要做的只是將這些IP核加入到我們的系統裡完成我們需要的功能。硬體系統完成後,需要在Altera公司提供的nios IDE環境下對硬體系統進行軟體程式設計,在這裡,完全用c語言來完成所需要的功能。

與前邊學習微控制器、FPGA一樣,第一個實驗還是led閃爍,然後慢慢的轉向一些比較複雜的功能設計上去,也無非是實現以前用verilog實現過的一些功能。兩者的區別是:一種完全用verilog語言來實現全部功能;一種需要先用sopc builder搭建硬體系統,然後在nios ide中進行軟體的程式設計。這兩種方法都能夠實現需要的功能,但是後者更方便快捷,因為在這種方法裡,我們使用的是“拿來主義”,IP核已經實現了我們的功能,要做的僅僅是去利用它而已。
再後來學習ucos嵌入式作業系統,主要是運用在FPGA裡面。nios已經為使用者移植好了,不需要修改任何檔案。在nios使用者介面裡進行一些相應的設定就可以使用了。Altera公司為我們提供的模板裡邊有幾個很好的例子,任務管理、訊號量、郵箱傳遞、事件標誌、時間管理等提供了很好的模板,我們需要做的是認真的閱讀,研究它,必要的話對模板進行一些改寫來完成自己的功能,這是模仿的更高境界了,把他的一些東西進行吸收轉化成為自己的東西,我想這是一個硬體愛好者和初學者非常樂於做的事情。
在進行FPGA學習的時候,我遇到過問題停滯不前,試驗沒有進展,心情沮喪的時候。那時對底層硬體一無所知,連對基本的原理圖也看不太懂,更別說程式在開發板上是怎麼執行的了。再到後來進行nios開發的時候,這種沮喪感與日俱增,每天感受不到一點進步,真是很漫長難熬的日子。
一次,我和辦公室的一個工程師聊天,談到了我的困惑,他建議我先學習微控制器,自己搭建硬體平臺,從最小系統做起。這個工程師古道熱腸,學習方面的問題他總是很耐心地幫助解答,讓我受益匪淺,我很慶幸能夠在這種環境當中學習。還有我的導師,他是一個擁有近30年硬體開發經驗的資深研究員,開始工作的時候我什麼都不懂,但總喜歡往導師辦公室跑,喜歡和他瞎聊。他為人和藹可親,容易接近,和他交流的時候總能得到一些職業和人生方面的忠告,這些忠告將伴隨著我一生。到後來,事情逐漸有了轉機,我也慢慢適應了這種心情,調整好了心態。現在想起來,慶幸自己並沒有絕望,沒有對自己熱愛的硬體失去信心。我想說的還是那句老話:遇到問題的時候,當我們感覺事情沒法進展下去的時候,不妨換一種方式,與周邊的人聊聊,或許會有改變。或許這就是學習嵌入式中最大的困難吧!人生總是有很多坎坷,我們的學習職業生涯也是如此。
這裡寫圖片描述

相關推薦

青春 FROM嵌入式行業摸爬滾打

致青春 FROM:一隻嵌入式行業摸爬滾打數十載的老鳥 時間:2018-03-22 來源:網際網路 作者: 標籤:工程師 嵌入式 FPGA 作為一名在嵌入式行業摸爬滾打許久的老鳥,回想自己的經歷之路,那麼漫長可又彷彿近在眼前。——此文僅獻給那些剛剛踏上

Nodejs學習筆記()--- 簡介及安裝Node.js開發環境

ack 目錄 javascrip 難度 時間 網站開發 clas jetbrains 常用 目錄 學習資料 簡介 安裝Node.js npm簡介 開發工具 Sublime Node.js開發環境配置 擴展:安裝多版本管理器 學習資料   1.深入淺出Node.j

權限管理學習 、ASP.NET FORMS身份認證

datetime archive 什麽 void ole data nbsp onf href 【轉】權限管理學習 一、ASP.NET Forms身份認證 說明:本文示例使用的VS2017和MVC5。系統無論大小、牛逼或屌絲,一般都離不開註冊、登錄。那麽接下來我們就來分析下

王陽明耐住寂寞,守得花開

只需要 自己的 long 完全 一點 思考 網上 地下室 水流 轉自:http://www.longquanzs.org/xxyx/81722.htm 蔣勛曾說:人和人之間得關系只有兩種,一種是生離,一種是死別。 親如父母兄弟,也只能陪你走一程。 沒有

Java併發程式設計同步容器

  為了方便編寫出執行緒安全的程式,Java裡面提供了一些執行緒安全類和併發工具,比如:同步容器、併發容器、阻塞佇列、Synchronizer(比如CountDownLatch)。今天我們就來討論下同步容器。   一、為什麼會出現同步容器?   在Java的集合容器框架中,主要有四大類別:Li

自動化測試框架 pytest&allure ,提高自動化健壯性和穩定性

序 在之前,我寫過一個系列“從零開始搭建一個簡單的ui自動化測試框架(pytest+selenium+allure)”,在這個系列裡,主要介紹瞭如何從零開始去搭建一個可用的自動化工程框架,但是還缺乏了一些細節的補充,例如對於自動化測試而言,如何提高其測試的穩定性? 本篇文章,將會和讀者一起探討這個

Java併發程式設計併發容器之ConcurrentHashMap

  JDK5中添加了新的concurrent包,相對同步容器而言,併發容器通過一些機制改進了併發效能。因為同步容器將所有對容器狀態的訪問都序列化了,這樣保證了執行緒的安全性,所以這種方法的代價就是嚴重降低了併發性,當多個執行緒競爭容器時,吞吐量嚴重降低。因此Java5.0開始針對多執行緒併發訪問設計,提供了併

Spring核心之BeanFactory 張圖看懂getBean全過程

Spring通過資源載入器載入相應的XML檔案,使用讀取器讀取資源載入器中的檔案到讀取器中,在讀取過程中,解析相應的xml檔案元素,轉化為spring定義的資料結BeanDefinition,把相應的BeanDefinition註冊到登錄檔中。登錄檔中包含的BeanDefinition的資料結構,沒有經過加工

Java併發程式設計volatile關鍵字解析

volatile這個關鍵字可能很多朋友都聽說過,或許也都用過。在Java 5之前,它是一個備受爭議的關鍵字,因為在程式中使用它往往會導致出人意料的結果。在Java 5之後,volatile關鍵字才得以重獲生機。   volatile關鍵字雖然從字面上理解起來比較簡單,但

Java併發程式設計深入剖析ThreadLocal

 想必很多朋友對ThreadLocal並不陌生,今天我們就來一起探討下ThreadLocal的使用方法和實現原理。首先,本文先談一下對ThreadLocal的理解,然後根據ThreadLocal類的原始碼分析了其實現原理和使用需要注意的地方,最後給出了兩個應用場景。   以

架構之路從管理者的角度看問題

  http://www.cnblogs.com/freeflying/p/6036910.html 同步釋出在知乎,也不知道在部落格園裡這算不算水文,能不能上首頁。但園子裡還有一千多粉絲,我主要是想通知下面這件事:   +++++++++++++++++++ 這個系列寫得很坎坷

洪強寧從程式設計師到架構師,從架構師到 CTO

在文章開頭,先介紹一位技術專家:洪強寧,愛因互動創始人 &CTO 洪強寧,11 年網際網路從業經驗,商用對話機器人創業中。前豆瓣首席架構師,前宜信大資料創新中心首席架構師,資深 Python 開發者,為中國 Python 使用者組(CPUG)的創立者之

N個人圍成圈報數逢三出圈

//Author:Guo R.H//    USTC//N個人圍成一圈報數,逢三出圈#include<stdio.h>#include<string.h>#define N 10void main(){ int a[N],i,t=0,count=0; for(i=0;i<N;i+

Pycharm使用技巧建立py檔案時自動生成註釋作者、時間、檔名等

【轉】https://blog.csdn.net/xiemanr/article/details/79579932 我們在寫程式碼建立檔案時有時候希望在檔案頂部自動生成一些註釋,如作者、建立時間等資訊,不用每次手動輸入,畢竟“偷懶”是程式設計師的優良傳統。PyCharm提供了自動生成檔案頂部註

springboot整合spring security()

原文作者:王文健  來源:CSDN  轉自原文:https://blog.csdn.net/qq_29580525/article/details/79317969  但是原文有幾處錯誤,且本文也結合了其他自己的知識,可以說是上文的升級版本 一、Spring s

地址重定位靜態重定位和動態重定位

一、靜態重定位靜態重定位是在程式執行之前進行重定位,它根據裝配模組將要裝入的記憶體起始位置,直接修改裝配模組中的有關使用地址的指令。  例如,一個以“0”作為參考地址的裝配模組,要裝入以100為起始地址的儲存空間。顯然,在裝入之前要做某些修改,程式才能正確執行。例如,MOV  EAX,[500]這條指令的意義

QSS獨門祕籍subcontrol

QSS是C++ Qt中的介面美化神器,其語法和CSS區別不大,但是QSS有一個獨有的功能——subcontrol,這是CSS所沒有的,一個widget往往由多個子部件構成,利用subcontrol可以對視窗部件的某些子部件做精細處理,從而使得介面美化達到定製最大化。 以下

Android外掛化從入門到放棄

本文根據包建強在2016GMTC全球移動開發大會上的演講整理而成。 首先自我介紹一下,我叫包建強,是這個分場的主持人。我去年寫了一本書,叫《App研發錄》,相信有很多從事技術的朋友看過或買過。 引言 先簡單介紹一下Android外掛化。很早之前已經有公司在研究這項技

前端精選文摘BFC 神奇背後的原理

level r12 get com 不同類 absolute position 方向 增加 BFC 已經是一個耳聽熟聞的詞語了,網上有許多關於 BFC 的文章,介紹了如何觸發 BFC 以及 BFC 的一些用處(如清浮動,防止 margin 重疊等)。雖然我知道如何利用 BF

leetcode錯誤提示member access within misaligned address 0x000000000031 for type 'struct ListNode'

錯誤提示: member access within misaligned address 0x000000000031 for type 'struct ListNode', which requires 8 byte alignment 原因分析: 在連結串列中