0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

systick_handler無法進(jìn)入怎么解決

科技綠洲 ? 來源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2023-12-01 15:36 ? 次閱讀

嵌入式系統(tǒng)中,SysTick是一個(gè)用于定時(shí)器和延時(shí)的模塊,通常用于處理實(shí)時(shí)任務(wù)、中斷和延時(shí)等。然而,在某些情況下,SysTick中斷處理函數(shù)(systick_handler)可能無法進(jìn)入,在這種情況下,我們需要采取一些措施來解決這個(gè)問題。

在解決這個(gè)問題之前,我們需要了解一下SysTick模塊和其相關(guān)概念。

首先,SysTick是一個(gè)與外設(shè)模塊時(shí)鐘頻率相對(duì)應(yīng)的計(jì)數(shù)器,它通過加載一個(gè)初始值和遞減計(jì)數(shù)來實(shí)現(xiàn)定時(shí)功能。當(dāng)計(jì)數(shù)值減到零時(shí),將產(chǎn)生一個(gè)SysTick中斷。

SysTick中斷處理函數(shù)(systick_handler)是一個(gè)用戶定義的函數(shù),用于處理SysTick中斷。當(dāng)SysTick計(jì)數(shù)器減到零時(shí),CPU會(huì)跳轉(zhuǎn)到這個(gè)函數(shù)執(zhí)行相應(yīng)的中斷處理代碼。

當(dāng)systick_handler無法進(jìn)入時(shí),可能存在以下幾個(gè)原因:

  1. 中斷優(yōu)先級(jí)設(shè)置錯(cuò)誤:SysTick中斷的優(yōu)先級(jí)需要設(shè)置為合適的值,以確保其優(yōu)先級(jí)高于其他中斷。如果設(shè)置了一個(gè)較低的優(yōu)先級(jí),其他中斷可能會(huì)占用處理器資源而導(dǎo)致SysTick中斷被延遲執(zhí)行或丟失。
  2. 中斷使能未啟用:SysTick中斷需要在相關(guān)寄存器中進(jìn)行使能設(shè)置,以便使中斷能夠正常觸發(fā)。如果中斷使能未啟用,即使計(jì)數(shù)器減到零也不會(huì)進(jìn)入中斷處理函數(shù)。
  3. 函數(shù)命名錯(cuò)誤或未正確注冊:在一些嵌入式系統(tǒng)中,SysTick中斷處理函數(shù)的命名需要按照一定的規(guī)則進(jìn)行命名。如果命名錯(cuò)誤或未正確注冊到中斷向量表中,SysTick中斷處理函數(shù)將無法被正確調(diào)用。

解決這個(gè)問題,我們可以采取以下幾個(gè)步驟:

  1. 檢查中斷優(yōu)先級(jí)設(shè)置:查閱相關(guān)文檔,確保SysTick中斷的優(yōu)先級(jí)設(shè)置正確。優(yōu)先級(jí)設(shè)置通常是通過在相關(guān)的控制寄存器中進(jìn)行設(shè)置,確保SysTick中斷優(yōu)先級(jí)高于其他中斷。
  2. 啟用中斷使能:在相關(guān)的控制寄存器中啟用SysTick中斷使能。確保中斷使能位正確設(shè)置為1,以使SysTick中斷可以觸發(fā)。
  3. 檢查函數(shù)命名和注冊:確保systick_handler函數(shù)的命名正確,并將其正確注冊到中斷向量表中。根據(jù)不同的嵌入式系統(tǒng),函數(shù)命名和注冊方式可能會(huì)有所不同,詳細(xì)的方法可以參考嵌入式系統(tǒng)的相關(guān)文檔。

此外,如果以上方法無法解決問題,可以考慮以下額外操作:

  1. 檢查計(jì)數(shù)器初始化值:確保SysTick計(jì)數(shù)器的初始化值正確設(shè)置。如果初始化值太小,可能會(huì)導(dǎo)致計(jì)數(shù)器在很短的時(shí)間內(nèi)就減到零,從而導(dǎo)致中斷無法進(jìn)入??梢試L試增加計(jì)數(shù)器初始化值,以延長中斷觸發(fā)的時(shí)間間隔。
  2. 調(diào)試和排查其他中斷:在一些情況下,其他中斷可能會(huì)占用處理器資源,導(dǎo)致SysTick中斷被延遲執(zhí)行或丟失。通過調(diào)試和排查其他中斷,可以檢查它們是否存在問題或影響SysTick中斷的執(zhí)行。

總結(jié)起來,在解決SysTick中斷無法進(jìn)入的問題時(shí),我們需要確保中斷優(yōu)先級(jí)設(shè)置正確、中斷使能啟用、函數(shù)命名和注冊正確等。如果仍然無法解決問題,可以通過調(diào)整計(jì)數(shù)器的初始化值以及排查其他中斷等進(jìn)一步探索。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2612

    瀏覽量

    47006
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2241

    瀏覽量

    93969
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3218

    瀏覽量

    113669
  • Systick
    +關(guān)注

    關(guān)注

    0

    文章

    62

    瀏覽量

    13008
  • handler
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    3014
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    ModusToolbox?生成時(shí)如何調(diào)用systick計(jì)時(shí)器ISR?

    無法理解當(dāng)項(xiàng)目由 ModusToolbox?生成時(shí)如何調(diào)用 systick 計(jì)時(shí)器 ISR。 通常,當(dāng)您設(shè)置系統(tǒng)計(jì)時(shí)器并啟用其中斷時(shí),系統(tǒng)會(huì)直接從中斷向量調(diào)用 Systick_Handler。 我
    發(fā)表于 01-18 09:16

    在CYT2B73CAE單片機(jī)中使用systick的demo,無法進(jìn)入systick_handler是什么原因?

    在CYT2B73CAE單片機(jī)中使用systick的demo,無法進(jìn)入systick_handler中。請(qǐng)問這是什么原因?
    發(fā)表于 02-02 06:20

    stm32的SysTick_Handler()等中斷處理函數(shù)的重復(fù)定義

    (by hal_cm3.o and stm32f10x_it.o)..\STM3210E-EVAL\STM3210E-EVAL.axf: Error: L6200E: Symbol SysTick_Handler
    發(fā)表于 08-28 10:50

    void SysTick_Handler(void)是什么程序?

    void SysTick_Handler(void){HAL_IncTick();}是什么程序?__weak void HAL_IncTick(void){uwTick++;}為什么在RTC_timeshow處會(huì)跳到SyTick_Handler.
    發(fā)表于 09-14 09:41

    請(qǐng)問mini板子的ucos例程中系統(tǒng)時(shí)鐘中斷處理SysTick_Handler在哪?

    節(jié)拍到了,任務(wù)調(diào)度不是要在SysTick_Handler里面嗎找了半天沒找到呢,哈哈,求教
    發(fā)表于 05-08 02:39

    請(qǐng)問時(shí)鐘中斷函數(shù)void SysTick_Handler(void)在調(diào)用過程中不會(huì)改變r(jià)4-r11嗎?

    想請(qǐng)教原子大哥在ucos的系統(tǒng)時(shí)鐘中斷函數(shù)void SysTick_Handler(void){OSIntEnter();// OSTimeTick(); / OSIntExit();//}中
    發(fā)表于 08-19 00:11

    STM32中斷函數(shù)SysTick_Handler是什么意思?

    STM32中斷函數(shù)SysTick_Handler是什么意思?
    發(fā)表于 11-16 08:48

    STM32程序卡死在啟動(dòng)文件startup_stm32fxxxx.s的SysTick_Handler中怎么解決?

    STM32程序卡死在啟動(dòng)文件startup_stm32fxxxx.s的SysTick_Handler中怎么解決?
    發(fā)表于 01-18 07:52

    如何解決STM32 SysTick_Handler/SysTickHandler無法進(jìn)入中斷的問題?

    如何解決STM32 SysTick_Handler/SysTickHandler無法進(jìn)入中斷的問題?
    發(fā)表于 01-27 06:33

    CH32V103 SysTick相關(guān)的計(jì)數(shù)寄存器無法清零是為什么?

    在移植到 RT-Thread 的過程中,根據(jù)參考例程,在 SysTick_Handler 中斷處理函數(shù)中會(huì)清零 CNTL 寄存器的值.```rt_interrupt_enter
    發(fā)表于 05-27 06:33

    rt_hw_board_init中開中斷后觸發(fā)SysTick_Handler怎么辦呢

    現(xiàn)象:reboot命令重啟設(shè)備后,在rt_hw_board_init中打開中斷,會(huì)觸發(fā)SysTick_Handler,理論上這時(shí)候應(yīng)該沒有中斷才對(duì),bootloader中跳轉(zhuǎn)前也關(guān)閉了systick
    發(fā)表于 12-30 15:48

    經(jīng)典MCU延時(shí)

    unsigned int u32SysTicks = 0; void SysTick_Handler(void){ u32SysTicks++;} #de...
    發(fā)表于 10-25 09:51 ?12次下載
    經(jīng)典MCU延時(shí)

    STM32—關(guān)于SYSTICK系統(tǒng)時(shí)鐘的詳解及學(xué)習(xí)筆記

    SysTick_Handler中也無需對(duì)中斷標(biāo)志進(jìn)行清零(參考exit外部中斷服務(wù)函數(shù))2.要注意的是關(guān)于systick其實(shí)有兩個(gè)關(guān)鍵函數(shù),SySTick_Config,SysTick
    發(fā)表于 11-30 15:51 ?15次下載
    STM32—關(guān)于<b class='flag-5'>SYSTICK</b>系統(tǒng)時(shí)鐘的詳解及學(xué)習(xí)筆記

    STM32 SysTick_Handler/SysTickHandler 無法進(jìn)入中斷的問題

    STM32 SysTick_Handler/SysTickHandler 無法進(jìn)入中斷的問題首先,在3.5版本的庫函數(shù)中,SysTickHandler改為了SysTick_Handler
    發(fā)表于 12-02 18:36 ?17次下載
    STM32 <b class='flag-5'>SysTick_Handler</b>/SysTickHandler <b class='flag-5'>無法</b><b class='flag-5'>進(jìn)入</b>中斷的問題

    Systick_Handler B.卡死處理方法

    Systick_Handler B.卡死處理方法注:鄙人在學(xué)習(xí)國產(chǎn)GD32芯片和STM32芯片做嵌入式時(shí)候出現(xiàn)過單片機(jī)卡死在*.s啟動(dòng)文件Systick_Handler B.處現(xiàn)做系列總結(jié)
    發(fā)表于 12-03 15:21 ?21次下載
    <b class='flag-5'>Systick_Handler</b>   B.卡死處理方法