嵌入式八股RTOS與Linux---前言篇

前言

??Linux與RTOS是校招八股的時候很喜歡考察的知識,在這里并沒有把兩個操作系統完全的獨立開去講,放在一起對比或許可能加深印象。我們講Linux的內核有五部分組成:進程調度、內存管理、文件系統、網絡接口、進程間通信,所以我也將從這五方面出發 + 中斷管理去對比和RTOS的不同。本篇只是一個開始的介紹。

  1. RTOS是什么?和前后臺程序的區別是什么?
  • 前后臺程序: 前臺就是中斷 后臺就是while循環。 整個系統的結構簡單,但是對時間敏感的任務相應較差。比如在中斷響應結束后想要快速執行某項任務也得等while循環到
  • 實時操作系統:是一種專門設計用于實時應用程序的操作系統。實時應用程序需要在特定的時間約束內對事件作出快速響應,因此RTOS旨在提供可靠、可預測的系統響應性能
  • 實時操作系統的特點就是:確定性:(能在確定時間完成指定任務) / 可預測性 / 高可靠性
  1. 如何移植FreeRTOS?
  • sysTickHandler PendSVHandler 與 SVCHandler 的移植
    sysTickHandler : 任務調度 延時任務處理
    PendSVHandler : 任務切換 堆棧的保存
    SVCHandler : FreeRTOS中用來進入第一個任務
  • 選擇一種內存管理算法
    后面會細講
  • FreeRTOSConfig.h的配置
    使能什么調度原理
    CPU的時鐘頻率
    sysTickHandler調用的頻率
    受FreeRTOS管理中斷的
  1. RTOS的啟動流程
  • 4.1首先是裸機上電后的啟動流程

    • step1 給SP指針和PC指針賦值 PC指針指向Rest_Handler
      ??cortex-M3規定 起始地址必須存放堆頂指針 第二個地址是復位中斷向量入口地址,因為啟動的時候會從0x00000000取出值傳給SP指針 0x00000004的值賦給PC指針

      • SP指針的值是怎么出現在bin文件開頭?
        來自startup.s中這樣定義的段,這個段會在鏈接過程放在bin文件的開頭
        在這里插入圖片描述

      • ResetHandler是誰寫的
        也在startup.s中
        在這里插入圖片描述

    • step2:執行Rest_Handler

      • 2.1 執行SystemInit
        初始化時鐘這個核心外設
      • 2.2 執行__main函數
        主要是用來初始化程序運行必要的堆/棧環境 把bin文件中的DATA段搬到內存,清空ZI段,最終跳轉main函數–這是直接用匯編寫的
  • 4.2main函數創建開始任務 開啟任務調度函數vTaskStartScheduler();

  • 4.3vTaskStartScheduler()做了什么事情?

    • 創建空閑任務線程
    • 創建定時器服務任務線程
    • 設置PendSV 和 sysTick優先級為最低
    • 初始化一些全局變量,設置調度器狀態為Ture
    • 初始化時鐘節拍計數器、初始化臨界區嵌套計數器,如果ARM內核支持FPU,還會使能FPU
    • 啟動第一個任務–通過使能SVC異常
    • 通過SVCHandler跳轉第一個任務
  1. Linux的啟動流程
    5會放在一個專門的篇章—啟動與升級篇去講
  2. 硬實時與軟實時的區別
    硬實時嚴格限定在規定時間完成任務
    軟實時允許出現一定的時間偏差,在隨著時間偏差的增大 整個系統的正確性就開始了下滑
  3. RTOS和Linux的區別?
    關于這個問題 我希望后面把五個Linux內核子系統講清楚之后,就明了了

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73627.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73627.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73627.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ChatBI 的技術演進與實踐挑戰:衡石科技如何通過 DeepSeek 實現商業落地

隨著人工智能技術的快速發展,ChatBI(基于自然語言交互的商業智能)逐漸成為企業數據分析領域的熱門話題。作為 BI(商業智能)領域的新形態,ChatBI 通過自然語言處理(NLP)技術&#xff…

基于Vue實現Echarts的平滑曲線

在Vue2.x的項目中使用echarts實現如下效果 安裝echarts npm install echarts --save組件引入echarts // 在你的Vue組件中 import * as echarts from echarts;在模板中添加一個div元素&#xff0c;用來放置圖表 <divref"chart"class"chart"style"…

關于重構分析查詢界面的思考(未完)

業務系統里&#xff0c;查詢界面很常見&#xff0c;數據分析場景需求普遍而迫切&#xff0c;而新的技術也在不斷出現&#xff0c;很有必要重構分析查詢界面。 查詢篩選 為了盡可能從數據中發現&#xff0c;需要盡可能地將查詢條件添加進來&#xff0c;可這樣&#xff0c;查詢…

在jQuery中DOM操作

&#xff08;一&#xff09;元素選取 各種選擇器的使用方法與示例 標簽選擇器&#xff1a;通過 HTML 標簽名稱來選取元素。例如&#xff0c;若想選中頁面中所有的段落元素&#xff0c;可使用$(‘p’)。假設我們有如下 HTML 結構&#xff1a; 這是第一個段落 這是嵌套在div中的…

Java 集合框架中 `List` 接口及其子類的詳細介紹,并用 UML 圖表展示層次結構關系,用表格對比各個類的差異。

下面是 Java 集合框架中 List 接口及其子類的詳細介紹&#xff0c;并用 UML 圖表展示層次結構關系。最后&#xff0c;我會用表格對比各個類的差異。 Java 集合框架中 List 接口及其子類 UML 類圖描述 以下是 List 接口及其子類的 UML 類圖描述&#xff0c;不包含方法。 詳細…

Java面試八股—Redis篇

一、Redis的使用場景 &#xff08;一&#xff09;緩存 1.Redis使用場景緩存 場景&#xff1a;緩存熱點數據&#xff08;如用戶信息、商品詳情&#xff09;&#xff0c;減少數據庫訪問壓力&#xff0c;提升響應速度。 2.緩存穿透 正常的訪問是&#xff1a;根據ID查詢文章&…

Spring Boot使用線程池創建多線程

在 Spring Boot 2 中&#xff0c;可以使用 Autowired 注入 線程池&#xff08;ThreadPoolTaskExecutor 或 ExecutorService&#xff09;&#xff0c;從而管理線程的創建和執行。以下是使用 Autowired 方式注入線程池的完整示例。 1. 通過 Autowired 注入 ThreadPoolTaskExecuto…

9、交付手段-強化肌肉記憶(隨身工具箱)

一、交付工具箱 當臨時遇到各類交付棘手問題時&#xff0c;大腦里記住交付工具的使用場景&#xff0c;有利于快速決策&#xff0c;將這些工具轉為肌肉記憶&#xff0c;能夠快速靈活處理交付中的各類問題&#xff0c;蛻變為交付之星 1、復雜項目&#xff1a;WBS分解、日站會、…

【概念】Node.js,Express.js MongoDB Mongoose Express-Validator Async Handler

1. Node.js 定義&#xff1a;Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行時環境&#xff0c;允許你在服務器端運行 JavaScript 代碼。作用&#xff1a;它使得開發者可以使用 JavaScript 編寫服務器端代碼&#xff0c;從而實現前后端使用同一種語言。比喻&#xff1a…

【GPT入門】第22課 langchain LCEL介紹

【GPT入門】第22課 langchain LCEL介紹 1. LCEL介紹與特點2. 原生API與LCEL的對比2. 簡單demo 1. LCEL介紹與特點 LCEL 即 LangChain Expression Language&#xff0c;是 LangChain 推出的一種聲明式語言&#xff0c;用于簡化和優化在 LangChain 框架內構建復雜鏈和應用的過程…

數據結構——單鏈表list

前言&#xff1a;大家好&#x1f60d;&#xff0c;本文主要介紹數據結構——單鏈表 目錄 一、單鏈表 二、使用步驟 1.結構體定義 2.初始化 3.插入 3.1 頭插 3.2 尾插 3.3 按位置插 四.刪除 4.1頭刪 4.2 尾刪 4.3 按位置刪 4.4按值刪 五 統計有效值個數 六 銷毀…

堆排序:力扣215.數組中的第K個大元素

一、問題描述 在一個整數數組 nums 中&#xff0c;需要找出第 k 個最大的元素。這里要注意&#xff0c;我們要找的是數組排序后的第 k 個最大元素&#xff0c;而不是第 k 個不同的元素。例如&#xff0c;對于數組 [3,2,1,5,6,4]&#xff0c;當 k 2 時&#xff0c;第 2 個最大…

C語言(25)

一.數據在內存中的存儲 1.整數在內存中的存儲 整數在內存中以二進制的形式儲存&#xff0c;分別為原碼&#xff0c;補碼&#xff0c;反碼 有符號的整數&#xff0c;在上述三種形式都有符號位和數值位兩個部分&#xff0c;符號位為0是正數&#xff0c;1是負數&#xff0c;最高…

鴻蒙開發-一多開發之媒體查詢功能

在HarmonyOS中&#xff0c;使用ArkTS語法實現響應式布局的媒體查詢是一個強大的功能&#xff0c;它允許開發者根據不同的設備特征&#xff08;如屏幕尺寸、屏幕方向等&#xff09;動態地調整UI布局和樣式。以下是一個使用媒體查詢實現響應式布局的實例&#xff1a; 1. 導入必要…

Docker運行hello-world鏡像失敗或超時:Unable to find image ‘hello-world:latest‘ locally Trying to pull reposi

Docker運行hello-world鏡像失敗或超時&#xff0c;報錯&#xff1a;Unable to find image ‘hello-world:latest’ locally Trying to pull repository docker.io/library/hello-world … /usr/bin/docker-current: missing signature key. See ‘/usr/bin/docker-current run …

MySQL連接較慢原因分析及解決措施

文章目錄 整體說明一、問題現象二、問題分析2.1、DNS反向解析問題2.2、網絡問題2.3、SSL/TLS協商問題2.4、自動補全的延遲 三、問題解決 摘要&#xff1a; MySQL連接較慢原因分析及解決措施 關鍵詞&#xff1a; MySQL、連接緩慢、客戶端、參數設置 整體說明 在使用MySQL的時候…

doris:安全概覽

oris 提供以下機制管理數據安全&#xff1a; 身份認證&#xff1a;Doris 支持用戶名/密碼與 LDAP 認證方式。 內置認證&#xff1a;Doris 內置了用戶名/密碼的認證方式&#xff0c;可以自定義密碼策略&#xff1b; LDAP 認證&#xff1a;Doris 可以通過 LDAP 服務集中管理用戶…

C++之文字修仙小游戲

1 效果 1.1 截圖 游戲運行&#xff1a; 存檔&#xff1a; 1.2 游玩警告 注意&#xff01;不要修改裝備概率&#xff0c;裝備的概率都是湊好的數字。如果想要速升&#xff0c;修改靈石數量 2 代碼 2.1 代碼大綱 1. 游戲框架與初始化 控制臺操作&#xff1a;通過 gotoxy() …

Docker安裝部署RabbitMQ

Docker安裝部署RabbitMQ 本文介紹了如何在Linux&#xff08;CentOS 7&#xff09;系統環境下的Docker上安裝部署RabbitMQ的詳細過程。 目錄 Docker安裝部署RabbitMQ一、環境準備1.Linux環境2.Docker3.停止并移除現有的 RabbitMQ 鏡像和容器 二、安裝部署RabbitMQ1.拉取 RabbitM…

【MyBatis Plus 邏輯刪除詳解】

文章目錄 MyBatis Plus 邏輯刪除詳解前言什么是邏輯刪除&#xff1f;MyBatis Plus 中的邏輯刪除1. 添加邏輯刪除字段2. 實體類的配置3. 配置 MyBatis Plus4. 使用邏輯刪除5. 查詢邏輯刪除的記錄 MyBatis Plus 邏輯刪除詳解 前言 MyBatis Plus 是一個強大的持久化框架&#xf…