
以課堂實錄的方式撰寫。全面覆蓋知識體系;記錄講師授課的點點滴滴,內容詳盡、透徹、系統,可以作為參考性。
發布時間:2021-08-27 15:42:54來源:有考培訓網綜合
編程到一定階段升值加薪很難?嵌入式工程師,技術牛,薪資無上限編程這門青春飯中可以從業時間長。
嵌入式符合當下流行的計算機熱點發展方向,屬于知識密集的編程方向,很難被人工智能替代。
基礎班、白領班、輔導班班型靈活多樣,全日制班、周末班時間靈活支配。
以嵌入式技術為核心,融合物聯網、AI、python、5G、Android等多種高薪熱門技術,打造嵌入式人工智能人才核心競爭力。
擁有多年嵌入式物聯網方向的研發及培訓經驗底蘊,積累了強大的行業壁壘,有力支撐了嵌入式人工智能課程的厚積薄發。
真實企業人工智能產品研發,強勢推出AI+嵌入式、AI+物聯網、AI+機器人三大系列項目實訓及自主研發硬件實訓平臺。
業內人工智能軟硬件結合的教學課程,提供高含金量的嵌入式人工智能軟硬件結合教學解決方案,技能多方面提高。
以課堂實錄的方式撰寫。全面覆蓋知識體系;記錄講師授課的點點滴滴,內容詳盡、透徹、系統,可以作為參考性。
針對每天知識點進行組織。通過測試,學員可以及時鞏固所學知識點,同時也可以檢測對知識點的掌握情況。
詳細的經典案例描述,提煉總結了新入行軟件工程師在2年內將會經常遇到的技術實現難點及其經典解決方案。
以文檔的形式提供每日課后作業的題目、涉及知識點和解決方案提示等信息,可以保障不同程度的學員得到有效的代碼訓練。
重點課堂回放——對于課程體系中一些重點、難點的環節,將通過在線視頻的方式讓學員反復收看,提升理解,學員可以在學習期間領略更多的精彩講解。
即時在線呼叫。學員在學習過程中遇到的任何困難和問題都可以通過在線問答系統進行求助。項目經理、助教、講師會及時以線上或線下的方式解決問題。
達內教育
昆明嵌入式培訓班選哪個?達內教育隸屬于加拿大達內IT培訓集團,于2002年成立 ,是達內IT培訓集團直屬學院。學院成立旨在建立軟件高級人才培養的通道,促進我國信息產業迅速發展。依托達內集團國內持平的課程體系(TTS6.0),雄厚的師資力量,廣闊的就業平臺,迄今為止已與國內上萬家IT企業進行人才輸送合作,其中緊密合作企業4000余家、深入合作企業200余家、訂單輸送聯盟企業107家。
在uC/OS-II下開發一個串口的驅動程序,驅動和接口在測試中均未發現問題。應用中開發了個通訊程序,串口驅動提供了一個查詢驅動緩沖區字符的函數:GetRxBuffCharNum()。 高層需要接受一定數量的字符以后才能對包做解析,用偽代碼表示如下:
bExit = FALSE;
do { if (GetRxBuffCharNum() >= 30) bExit = ReadRxBuff(buff, GetRxBuffCharNum());
}
while (!bExit);
這段代碼判斷當前緩沖區中超過30個字符,就將緩沖區中全部字符讀到緩沖區中,直到讀取成功為止。邏輯清楚,思路也清楚。但這段代碼是不能正常工作。如果是在PC機上,定然是沒有任何問題,工作的異常正常。但在嵌入式里真的是不得而知了。同事很郁悶,不知道為什么。來請我解決問題,當時我看到代碼,就問了他,GetRxBuffCharNum()是怎么實現的?打開一看:
unsigned GetRxBuffCharNum(void)
{
cpu_register reg;
unsigned num;
reg = interrupt_disable();
num = gRxBuffCharNum;
interrupt_enable(reg);
return (num);
}
很明顯,由于在循環中,interruput_disable()和interrupt_enable()之間是個全局臨界區域,增加gRxBufCharNum的完整性。但是,由于在外層的do { } while() 循環中,CPU頻繁的關閉中斷,打開中斷,這個時間非常的短。實際上CPU可能不能正常的響應UART的中斷。
當然這和uart的波特率、硬件緩沖區的大小還有CPU的速度都有關系。我們使用的波特率非常高,大約有3Mbps。uart起始信號和停止信號占一個比特位。一個字節需要消耗10個周期。3Mbps的波特率大約需要3.3us傳輸一個字節。3.3us能執行多少個CPU指令呢?100MHz的ARM,大約能執行150條指令左右。結果關閉中斷的時間是多長呢?一般ARM關閉中斷都需要4條以上的指令,打開又有4條以上的指令。接收uart中斷的代碼實際上是不止20條指令的。所以,這樣下來,就有可能出現丟失通信數據的Bug,體現在系統層面上,就是通信不穩定。
修改這段代碼其實很簡單,較簡單的辦法是從高層修改。即:
bExit = FALSE;
do { DelayUs(20);
//延時 20us,一般采用空循環指令實現
num = GetRxBuffCharNum();
if (num >= 30) bExit = ReadRxBuff(buff, num);
}
while (!bExit);
這樣,讓CPU有時間去執行中斷的代碼,從而避免了頻繁關閉中斷造成的中斷代碼執行不及時,產生的信息丟失。在嵌入式系統里,大部分的RTOS應用都是不帶串口驅動。自己設計代碼時,沒有充分考慮代碼與內核的結合。造成代碼深層次的問題。RTOS之所以稱為RTOS,就是因為對事件的響應;事件的響應依賴于CPU對中斷的響應速度。驅動在Linux這種系統中都是與內核高度整合,一起運行在內核態。
更多培訓課程: 昆明達內嵌入式課程 更多學校信息: 昆明五華區五一路達內IT教育培訓 咨詢電話: