麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Arduino IDE SDK development SoftWare BootFlow.

2019-11-09 16:17:51
字體:
供稿:網(wǎng)友

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

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

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

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

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

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

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

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

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

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

從嵌入式os的角度看,arduino ide提供的sdk僅僅是一個(gè)前后臺(tái)系統(tǒng), 是一個(gè)順序執(zhí)行的系統(tǒng),其程序進(jìn)程中只有一個(gè)main線>程,程序功能的實(shí)現(xiàn)是依靠死循環(huán)實(shí)現(xiàn);實(shí)時(shí)性主要是靠外部中斷信號(hào),或者檢測(cè)IO口得信號(hào)實(shí)現(xiàn)的,中斷的運(yùn)行的速度還>是比較快的,這是因?yàn)樗耆腔谟布C(jī)制的。至于實(shí)時(shí)性,如果是在簡單的系統(tǒng)中,即任務(wù)數(shù)少的情況,那前后臺(tái)還是>很迅速的.實(shí)時(shí)性收到線程數(shù)量的限制.

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


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄色大片在线观看 | 艹男人的日日夜夜 | 国产毛片aaa一区二区三区视频 | 成人18网站 | 精品国产一区二区三区天美传媒 | 久久国产精品久久久久久电车 | 免费黄色入口 | 91亚洲免费视频 | 日本在线播放一区二区 | 欧美精品日日鲁夜夜添 | 桥本有菜免费av一区二区三区 | 国产精品视频2021 | 美国av在线免费观看 | 99国产精品欲a | 日日狠狠久久偷偷四色综合免费 | 美女黄污视频 | 久章草影院 | 激情黄页 | 黄色视频a级毛片 | 91成人在线网站 | 久久综合爱 | 国产伦精品一区二区三区在线 | xxxxxx视频 | 成人精品视频在线 | 中文字幕www. | 久久狠狠高潮亚洲精品 | 亚洲va久久久噜噜噜久久男同 | 啊~用cao嗯力cao烂我视频 | 欧美成人精品一区二区三区 | 日本人乱人乱亲乱色视频观看 | 91色爱 | 国产1区在线观看 | 日韩字幕在线观看 | 欧美日韩一区三区 | 欧美大电影免费观看 | 99热久草 | 国产一区二区三区高清 | 国产成人精品免费视频大全办公室 | 日本中文字幕高清 | 男女无遮挡羞羞视频 | 国产1区2区3区中文字幕 |