1. 程式人生 > >PX4原始碼分析5_PX4啟動流程

PX4原始碼分析5_PX4啟動流程

PX4啟動流程,分為4步:

1.__start:

上電之後程式入口為Firmware/NuttX/nuttx/arch/arm/src/stm32/stm32_start.c中的__start函式,負責stm32晶片的底層初始化,包括是時鐘,GPIO等。

2.os_start:

__start函式呼叫Firmware/NuttX/nuttx/sched/os_start.c中的os_start函式,負責os的底層初始化,包括佇列和程序結構等。

3.os_bringup:

os_start函式呼叫Firmware/NuttX/nuttx/sched/os_bringup.c中的os_bringup函式,負責os基本程序的啟動和使用者程序的啟動。使用者啟動入口由CONFIG_USER_ENTRYPOINT巨集定義進行指定。

4.CONFIG_USER_ENTRYPOINT:

FMU和IO的啟動入口不同,分別為:
(1)FMU中CONFIG_USER_ENTRYPOINT巨集定義為nsh_main:
[1] 呼叫nsh_main函式。
[2] nsh_main函式呼叫Firmware/NuttX/apps/nshlib/nsh_consolemain.c中nsh_consolemain函式。
[3] nsh_consolemain函式呼叫nsh_initscript函式。
[4] nsh_initscript函式所執行的指令碼即為FMU的啟動指令碼rcS。
[5] rcS指令碼中負責掛載Sd卡,啟動uorb,載入引數配置檔案,啟動dataman資料管理,啟動各感測器,commander,執行rc.io,執行rc.interface(混控器),執行rc.mc_app(飛控姿態與位置演算法)等。

(2)IO中CONFIG_USER_ENTRYPOINT巨集定義為user_main:
呼叫src/modules/px4iofirmware/px4io.c中的user_start函式,負責IO基礎環境的初始化,包括PWM,串列埠,ADC等,最後進入死迴圈,用於遙控器輸入和與FMU通訊的內容。

相關推薦

PX4原始碼分析5_PX4啟動流程

PX4啟動流程,分為4步: 1.__start: 上電之後程式入口為Firmware/NuttX/nuttx/arch/arm/src/stm32/stm32_start.c中的__start函式,負責stm32晶片的底層初始化,包括是時鐘,GPIO等。

【Android】原始碼分析 - Activity啟動流程

啟動Activity的方式 Activity有2種啟動的方式,一種是在Launcher介面點選應用的圖示、另一種是在應用中通過Intent進行跳轉。我們主要介紹與後者相關的啟動流程。 Intent intent = new Intent(this, TestActivity

一,移植uboot,分析uboot啟動流程

寫到 位置 ESS fff setup boa soft bec 進入 文檔時間:2018-08-08 交叉編譯器:arm-linux-gcc-4.3.2 Ubuntu版本:16.04 uboot版本:2013.10 uboot啟動流程簡要如下:     a,設置CPU為管

原始碼分析Retrofit請求流程

Retrofit 是 square 公司的另一款廣泛流行的網路請求框架。前面的一篇文章《原始碼分析OKHttp執行過程》已經對 OkHttp 網路請求框架有一個大概的瞭解。今天同樣地對 Retrofit 的原始碼進行走讀,對其底層的實現邏輯做到心中有數。 0x00 基本用法 Retrofit 的專案地址為

【kubernetes/k8s原始碼分析】kubelet原始碼分析啟動容器

主要是呼叫runtime,這裡預設為docker 0. 資料流 NewMainKubelet(cmd/kubelet/app/server.go) -> NewKubeGenericRuntimeManager(pkg/kubelet/kuberuntime/kuberuntime

Android系統原始碼分析--View繪製流程之-setContentView

上一篇分析了四大元件之ContentProvider,這也是四大元件最後一個。因此,從這篇開始我們分析新的篇章--View繪製流程,View繪製流程在Android開發中佔有非常重要的位置,只要有檢視的顯示,都離不開View的繪製,所以瞭解View繪製原理對於應用開發以及系統的學習至關重要。由於View

Egg.js 原始碼分析-專案啟動

前言 前端時間抽出時間針對Koa2原始碼進行了簡單的學習,koa 原始碼是一個很簡單的庫, 針對分析過程, 想手把手的實現一個型別koa 的框架,其程式碼, 根據一步步的完善實現一個簡單版本的Koa, 每一個步驟一個Branch , 如: stpe-1, 對應的是我想實現第一步的程式碼, 程式碼僅供自己簡單

從Android原始碼分析Activity載入流程

從Android原始碼分析Activity載入流程 概述:startActivity->startActivityForResult->Instrumentation::execStartActivity->scheduleLaunchActivi

《2.uboot和系統移植-第6部分-2.6.uboot原始碼分析2-啟動第二階段》

《2.uboot和系統移植-第6部分-2.6.uboot原始碼分析2-啟動第二階段》 第一部分、章節目錄 2.6.1.start_armboot函式簡介 2.6.2.start_armboot解析1 2.6.3.記憶體使用排布 2.6.4.start_armboot解析2 2.6.5.s

《2.uboot和系統移植-第5部分-2.5.uboot原始碼分析1-啟動第一階段》

《2.uboot和系統移植-第5部分-2.5.uboot原始碼分析1-啟動第一階段》 第一部分、章節目錄 2.5.1.start.S引入 2.5.2.start.S解析1 2.5.3.start.S解析2 2.5.4.start.S解析3 2.5.5.start.S解析4 2.5.6.s

ndroid系統原始碼分析--View繪製流程之-inflate

上一章我們分析了Activity啟動的時候呼叫setContentView載入佈局的過程,但是分析過程中我們留了兩個懸念,一個是將資原始檔中的layout中xml佈局檔案通過inflate載入到Activity中的過程,另一個是開始測量、佈局和繪製的過程,第二個我們放到measure過程中分析,這一篇先

dubbo原始碼分析-服務呼叫流程-筆記

消費端呼叫過程流程圖 消費端的呼叫過程 消費端介面例項: 服務端接收訊息處理過程 NettyHandler. messageReceived 接收訊息的時候,通過NettyHandler.messageReceived作為入口 @Override public vo

SRS(simple-rtmp-server)流媒體伺服器原始碼分析--系統啟動

SRS(simple-rtmp-server)流媒體伺服器原始碼分析--系統啟動 一、前言        小卒最近看SRS原始碼,隨手寫下部落格,其一為了整理思路,其二也是為日後翻看方便。如果不足之處,請指教!

原始碼分析AsyncTask執行流程和原理

本篇文章將從大體上分析AsyncTask的原理,不會涉及過多的細節。AsyncTask現在已經不再流行了,但作為學習還是要了解下。 使用方法 下面是AsyncTask一般的使用場景,相信使用過AsyncTask的人都不會覺得陌生 class MyAsyncTask ex

Libevent原始碼分析-----Libevent工作流程探究

        之前的博文講了很多Libevent的基礎構件,現在以一個實際例子來初步探究Libevent的基本工作流程。由於還有很多Libevent的細節並沒有講所以,這裡的探究還是比較簡潔,例子也相當簡單。 #include<unistd.h> #in

《springsecurity原始碼分析》2.springsecurity原始碼分析之認證流程

Spring Security核心就是一系列的過濾器鏈,當一個請求來的時候,首先要通過過濾器鏈的校驗,校驗通過之後才會訪問使用者各種資訊。  SecurityContextPersistenceFilter 當一個請求來的時候,它會將session中的值傳入到該執

openVswitch 2.10.0 (OVS)原始碼分析 Vswitchd啟動(上)

Vswitchd是ovs中執行在使用者空間的守護程序, 實現ovs主要的功能邏輯, 本文將著重分析其啟動過程. 資料結構 bridge/port/iface/ofproto/ofport 在數通領域, 交換機和橋很多時候可以是在說一個東西, 它工作在二層, 可

Open vSwitch(OvS)原始碼分析之工作流程(flow流表查詢)

前面分析了Open vSwitch幾部分原始碼,對於Open vSwitch也有了個大概的理解,今天要分析的程式碼將是整個Open vSwitch的重中之重。整個Open vSwitch的核心程式碼在datapath檔案中;而datapath檔案中的核心程式碼又在ovs_dp_process_re

elasticsearch原始碼分析啟動過程(二)

最近開始廣泛的使用elasticsearch,也開始寫一些java程式碼了,為了提高java程式碼能力,也為了更加深入一點了解elasticsearch的內部運作機制,所以開始看一些elasticsearch的原始碼了。對於這種廣受追捧的開源專案,細細品讀一定會受益匪淺,

Erlang:RabbitMQ原始碼分析 1. 啟動過程

RabbitMQ的啟動是基於boot steps, boot steps的每一個step可能是啟動一個component,也可能是列印一個啟動資訊。 boot steps是一個有向無環圖,保證了啟動的順序性。 一個boot step: -rabbit_boot_step({