1. 程式人生 > >嵌入式中斷服務函式的一些特點

嵌入式中斷服務函式的一些特點

  中斷服務程式需要滿足如下要求:
  (1)不能返回值;
  (2)不能向ISR傳遞引數;
  (3) ISR應該儘可能的短小精悍;
  (4) printf(char * lpFormatString,…)函式會帶來重入和效能問題,不能在ISR中採用。

  a.為什麼不能有返回值?

    中斷服務函式的呼叫是硬體級別的,當中斷產生,pc指標強制跳轉到對應的中斷服務函式入口,進入中斷具有隨機性,並不是某段程式碼對其進行呼叫,那麼如果有返回值它的返回值返回給誰?顯然這個返回值毫無意義,如果有返回值,它必定需要進行壓棧操作,這樣一來何時出棧怎麼出棧將變得無法解決。

  b.不能向ISR傳遞引數?

    同理,也是由於這樣會破壞棧的原因,因為函式傳遞引數必定會要求壓棧出棧操作,由於進入中斷服務函式的隨機行,誰給它傳遞引數都成問題

  c.ISR應儘可能的短小精悍?

    如果某個中斷頻繁產生,而它對應的ISR相當的耗時,那麼對中斷的響應就會無限的延遲,會丟掉很多的中斷請求

  d.printf(char * lpFormatString,…)函式會帶來重入和效能問題,不能在ISR中採用。

    這就涉及到一箇中斷巢狀問題,由於printf之類的glibc函式採用的是緩衝機制,這個緩衝區是共享的,相當於一個全域性變數,第一層中斷來時,它向緩衝裡面寫入一些部分內容,恰好這時來了個優先順序更高的中斷,它同樣呼叫了printf,也向緩衝裡面寫入一些內容,這樣緩衝區的內容就錯亂了。

相關推薦

嵌入式中斷服務函式一些特點

  中斷服務程式需要滿足如下要求:   (1)不能返回值;   (2)不能向ISR傳遞引數;   (3) ISR應該儘可能的短小精悍;   (4) printf(char * lpFormatString,…)函式會帶來重入和效能問題,不能在ISR中採用。   a.為什麼不能有返回值?     中斷服務函式

中斷服務函式能不能帶形參和返回值

從本質上來講,中斷是一種電訊號,當裝置有某種事件發生時,它就會產生中斷,通過匯流排把電訊號傳送給中斷控制器。如果中斷的線是啟用的,中斷控制器就把電訊號傳送給處理器的某個特定引腳。處理器於是立即停止自己正在做的事,跳到中斷處理程式的入口點,進行中斷處理。 (1) 硬中斷 由與系統相連

原子哥串列埠中斷服務函式解釋USART1_IRQHandler(void)整理

void USART1_IRQHandler(void)                 //串列埠1中斷服務程式  {

STM32F103配置串列埠中斷服務函式並接收double雙精度資料,python傳送和接收雙精度資料

(1)首先,我們要進行串列埠中斷服務函式的配置 void USART1_Config(void) {         GPIO_InitTypeDef GPIO_InitStructure;     &nb

stm32學習筆記(八)中斷服務函式函式呼叫的區別

在《微機原理》和《計算機組成》等課程[1-4]教學中(本文以MCS-51微控制器為例),中斷過程既是教學難點又是教學重點,它與主程式呼叫子程式過程有一定相似性,但又有很大區別,呼叫子程式過程相對比較容易掌握,通過把兩過程結合起來,採用比較教學方法,能收到了很好的教學效果。  1、兩過程定義與作用     子

zigbee協議棧 中斷服務函式定義方法

我們先看協議棧中 hal_uart.c 檔案中的串列埠操作中斷服務程式: HAL_ISR_FUNCTION( halUart0RxIsr, URX0_VECTOR )      //uart0  接收 HAL_ISR_FUNCTION( halUart1RxIsr, URX1_VECTOR )      /

關於中斷服務函式帶來返回值的思考

從本質上來講,中斷是一種電訊號,當裝置有某種事件發生時,它就會產生中斷,通過匯流排把電訊號傳送給中斷控制器。如果中斷的線是啟用的,中斷控制器就把電訊號傳送給處理器的某個特定引腳。處理器於是立即停止自己正在做的事,跳到中斷處理程式的入口點,進行中斷處理。 (1) 硬

request_irq() | 註冊中斷服務

when reason blank ini per ces inode his lis 一、中斷註冊方法 在linux內核中用於申請中斷的函數是request_irq(),函數原型在Kernel/irq/manage.c中定義: int request_irq(unsign

如何用代理平臺解決微服務一些痛點

協議 解決 不能 ima 前端開發 負載均衡 接口 lua腳本 服務架構 為什麽要做代理平臺 微服務架構越來越流行,在一個上百號人開發的項目中,使用微服務的方式,大量模塊之間通過接口調用,隨之也帶來了許多問題: 接口不能及時提供造成阻塞:往往客戶端需要等待後臺接口進

關於場景服務一些想法

定時 數據計算 移動 缺點 參數 所有 手機屏幕 最新 獨立 最近由於遇到一些問題,老大們決定把場景顯示相關的代碼拆分出來用一個獨立的線程去做(大概是實現一個獨立的場景服務吧),感覺這樣挺好的,畢竟這部分功能本來就較為獨立。 我對這部分內容還挺感興趣的,思考了一下,心裏有一

郵件服務一些A和MX類型惡意域名請求的解釋

smtp很經常看到一些郵件服務器主動請求一些惡意域名的的請求。這裏邊,有個smtp協議發件人任意偽造的漏洞。在不要用戶登錄的情況下,我們連接企業的郵件服務器,輸入mail form字段的值,即可以使服務器主動去請求這個值的域名服務器。 如下,我們的值為[email protected],當服務器接收到這個命令後會

安全服務一些思考

安服總結一些安服遇到的問題及思考 (一)安全服務小組的主要工作 (1)應急響應和取證溯源。(2)對客戶中出現的網絡威脅進行分析和處置。(3)配合公司自有產品發現威脅和解決網絡安全問題。(4)關註重大威脅事件,跟蹤並能及時將解決方案同步到客戶側。 (二)安全服務小組在現實中的任務 1)網絡安保 :在國家重大活動

關於java的一些特點

運行環境 這一 單元 多語 environ 簡單 對象 機制 運行 一、簡單   為什麽說簡單呢?因為凡是學過c++或者c的讀者,初次過來學習java的話會感覺java很熟悉,因為java中有許多語言和c或者c++中有許多一樣的,但是c++中一些容易 混淆的東西,在java

springcloud的Turbine配置監控多個服務一些坑!!!!InstanceMonitor$MisconfiguredHostException,No message available","path":"/actuator/hystrix.stre

踩了幾個小時坑,使用儀表盤監控單個服務的時候很容易,但是一到多個服務,瞬間坑就來了,大概碰到下面三個:   1InstanceMonitor$MisconfiguredHostException, No message available","path":"/actuator/hystrix.s

關於該不該使用微服務一些思考

首先,不是所有的專案都適合微服務,微服務的開發部署和傳統的單體應用是完全兩套獨立的東西,主要表現為: 1.微服務的架構比單體應用更加複雜; 2.架構搭好後,微服務的開發比傳統的應用要簡單,每個服務的職責更加單一; 3.微服務主要依賴CI 、CD、Docker、K8s等工具進行部署及運維,更加穩定可靠;

C++ sort()函式一些簡單的用法

C++標準函式模板庫(stl)裡有個自帶的排序函式sort(),該函式可以直接對陣列或者類似陣列型別的結構體進行排序,其時間複雜度為n*log2(n);sort()函式定義在標頭檔案<algorithm>中,基本用法為:sort(a,a+n);其中,a為一個數組的名稱,n為需

Atitit 微服務一些理論 目錄 1. 微服務的4個設計原則和19個解決方案 1 2. 微服務應用4個設計原則 1 2.1. AKF拆分原則 2 2.2. 前後端分離 2 2.3. 無狀態服務

Atitit 微服務的一些理論   目錄 1. 微服務的4個設計原則和19個解決方案 1 2. 微服務應用4個設計原則 1 2.1. AKF拆分原則 2 2.2. 前後端分離 2 2.3. 無狀態服務 2 2.4. Restful通訊風格 2 3. 微服

從cimutils到核心-(5)一幀資料採集完成控制器響應中斷處理函式

  (1) static irqreturn_t jz_camera_irq_handler(int irq, void *data) {   if(status & CIM_STATE_DMA_EOF) { //硬體傳送這個EOF給控制器響應中斷 /

為什麼中斷處理函式中不能出現阻塞

1、 中斷處理的時候,不應該發生程序切換,因為在中斷context中,唯一能打斷當前中斷handler的只有更高優先順序的中斷,它不會被程序打斷,如果在中斷context中休眠,則沒有辦法喚醒它,因為所有的wake_up_xxx都是針對某個程序而言的,而在中斷context中,沒有程序的概念,沒有一

服務一些概念

Spring cloud  netfix 包括:eureka服務註冊與發現機制   hystrix 斷路器 zuul archaius Spring cloud sleuth  日誌收集工具包 Spring cloud stream 資料流操作開發包