国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

Arduino IDE SDK development SoftWare BootFlow.

2019-11-09 17:20:59
字體:
來源:轉載
供稿:網(wǎng)友

安裝了64位linux版的arduino IDE 1.8.1用于在arduino_due平臺上做開發(fā),總體上給我的感覺用arduio IDE編譯,upload 程序,比之前在due上跑zephyr內核要直觀,方便很多, 只需要點擊幾個按鈕就能搞定一切. 但是IDE背后隱藏了很多重要的啟動機制,則是用這種開發(fā)模式看不到的.

 最簡單的例子, 打開一個arduion ide的一個工程,可以看到開發(fā)出來的接口只有setup和loop兩個: 這里寫圖片描述

 系統(tǒng)會主動鏈接和調用這兩個接口, 用戶只要在這兩個函數(shù)中寫好自己的邏輯.不需要知道背后的啟動細節(jié), 但這個流程是怎樣的呢?

進入到arduino的安裝目錄,找到arduion sdk所在路徑 /home/user/.arduino15/packages/arduino/hardware/sam/1.6.11/cores/arduino/main.cpp,打開main.cpp文件: 這里寫圖片描述 上圖清楚的表明了setup, loop的調用機制, 由此揭開了arduino ide sdk的神秘面紗.為了更好用,sdk屏蔽了 cpu底層的啟動細節(jié)以及必要的底層硬件初始化機制, 同時,sdk還提供了很多的庫文件類供用戶調用.

另一個問題來了, main函數(shù)是誰調用的呢? 要完整描述整個啟動流程,必須了解一些cortex-m系列處理器的細節(jié).  我們知道,cortex-m系列是從復位向量處開始啟動的,cortex_m有255個啟動向量,這些向量大部分是給外部IO中斷使用的,根據(jù)外部IO的連接可選配置, 但前16個是必不可少的,必須要設置, 以zephyr內核為例,在zephyr/arch/arm/core/cortex_m/vector_table.S文件中: 這里寫圖片描述 向量第二個slot __reset就是啟動入口. 處理器的實現(xiàn)不依賴os的邏輯,所以arduino也應該有同樣一張啟動向量表,我們要找到它,然后跟據(jù)第二個slot的定義去尋徐追蹤,直到找到調用main函數(shù),邏輯鏈條閉合.

幾經(jīng)周折,找到.arduino15/packages/arduino/hardware/sam/1.6.11/system/CMSIS/Device/ATMEL/sam3xa/source/gcc_atmel/startup_sam3xa.c  文件,異常向量表在這里:   這里寫圖片描述

得知啟動入口是Reset_Handler, 同樣定義在本文件中: 這里寫圖片描述

可以看到,在啟動線程里過來調用了前面提到的main函數(shù),整個邏輯鏈條打通了.

關于中斷處理, 以PIOD中斷為例, 在異常表中: 這里寫圖片描述 PIOD_Handler定義在中斷表里面,找到他的定義, 在文件 ~/.arduino15/packages/arduino/hardware/sam/1.6.11/cores/arduino/WInterrupts.c中: 這里寫圖片描述

看到函數(shù)中調用 callback指針表. 函數(shù)指針數(shù)組中記錄有每個終端發(fā)生時的終端處理程序入口,在同一個文件中被初始化: 這里寫圖片描述 所以,用戶程序只需要調用attachInterrupt函數(shù)注冊中斷入口即可.

從嵌入式os的角度看,arduino ide提供的sdk僅僅是一個前后臺系統(tǒng), 是一個順序執(zhí)行的系統(tǒng),其程序進程中只有一個main線>程,程序功能的實現(xiàn)是依靠死循環(huán)實現(xiàn);實時性主要是靠外部中斷信號,或者檢測IO口得信號實現(xiàn)的,中斷的運行的速度還>是比較快的,這是因為它完全是基于硬件機制的。至于實時性,如果是在簡單的系統(tǒng)中,即任務數(shù)少的情況,那前后臺還是>很迅速的.實時性收到線程數(shù)量的限制.

或者說arduino ide提供的sdk僅僅是一個單線程的裸機bootflow, 根本沒有os, 整個過程僅僅是不斷的執(zhí)行l(wèi)oop函數(shù),這讓我想起了西門子PLC的OB1 大循環(huán),所有的事件處理都要安排在一個循環(huán)內進行,對于一個系統(tǒng)來講,實時性肯定是不夠的.


上一篇:aqicn.org的秘密

下一篇:Https-OKHttp 配置

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜兴市| 阿拉善左旗| 武穴市| 潼南县| 朔州市| 金山区| 阜康市| 延津县| 阿荣旗| 交城县| 嘉荫县| 霍山县| 木里| 朔州市| 教育| 罗平县| 平武县| 炎陵县| 怀安县| 甘洛县| 靖江市| 刚察县| 嘉荫县| 汉川市| 青浦区| 林州市| 安顺市| 耿马| 西乌珠穆沁旗| 通道| 如东县| 新巴尔虎右旗| 革吉县| 西宁市| 石景山区| 仲巴县| 天等县| 桃园县| 汝城县| 永平县| 台南市|