找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3236|回復: 8
收起左側(cè)

關(guān)于單片機中斷服務函數(shù)變量問題

[復制鏈接]
ID:550952 發(fā)表于 2020-2-27 09:04 | 顯示全部樓層 |閱讀模式
void Service0(void) interrupt 1
{
        uint i, j;
}
void Service0(void) interrupt 1
{
        static uint i, j;
}
在中斷服務函數(shù)里使用局部變量和靜態(tài)變量有什么區(qū)別嗎?
在實際程序運行時好像沒有什么不一樣。

回復

使用道具 舉報

ID:215444 發(fā)表于 2020-2-27 12:33 | 顯示全部樓層
你這種寫法 我真沒用過 你要用靜態(tài)變量 就卸載函數(shù)前面不就好了。。
回復

使用道具 舉報

ID:275826 發(fā)表于 2020-2-27 17:22 | 顯示全部樓層
當static關(guān)鍵字修飾局部變量時,只會對該變量初始化一次。

當static關(guān)鍵字修飾局部變量時,該變量在程序中只有一份內(nèi)存。

當static關(guān)鍵字修飾局部變量時,該變量的作用域不會改變。

當static關(guān)鍵字修飾局部變量時,該變量的生命周期被延長,直到程序結(jié)束才銷毀。
回復

使用道具 舉報

ID:462827 發(fā)表于 2020-2-28 09:33 | 顯示全部樓層
用靜態(tài)變量它只初始化一次,下次中斷進入時能繼續(xù)沿用上一次中斷該變量保持的值。
回復

使用道具 舉報

ID:169549 發(fā)表于 2024-4-22 16:14 | 顯示全部樓層
如是不加STATIC修飾,每進一次中斷變量都會重新賦一次初值。
回復

使用道具 舉報

ID:828160 發(fā)表于 2024-4-22 17:24 | 顯示全部樓層
k455619 發(fā)表于 2020-2-27 12:33
你這種寫法 我真沒用過 你要用靜態(tài)變量 就卸載函數(shù)前面不就好了。。

局部變量,只能在定義的函數(shù)里面使用,進入函數(shù)時變量的值不確定,使用前要先初始化一下,退出函數(shù)后被釋放。

靜態(tài)變量就是只能在這個函數(shù)里面使用的全局變量,它有局部變量的特性,也有全局變量的特性,只能在定義的函數(shù)里面使用,再次進入函數(shù)時會保持之前的狀態(tài),退出函數(shù)時不會被釋放。
回復

使用道具 舉報

ID:883242 發(fā)表于 2024-4-22 18:05 | 顯示全部樓層
8位單片機因為資源太有限,c語言編譯器是靜態(tài)分配局部變量的,也就是說局部變量是一個固定的地址,樓主兩種寫法效果大概率會一樣,小概率不一樣是因為為了高效利用RAM,多個函數(shù)可以共用一個局部變量地址,看下map文件就行了。

標準c語言局部變量是在棧上面的,進入函數(shù)臨時分配,static局部變量是在堆上面跟全局變量在一起,兩者執(zhí)行起來效果就大不相同了。
回復

使用道具 舉報

ID:1117825 發(fā)表于 2024-4-22 19:58 | 顯示全部樓層
靜態(tài)變量會保持它的狀態(tài),下一次進來依然可以讀取到上一次的數(shù)值,而且只作用于該函數(shù)內(nèi)
回復

使用道具 舉報

ID:195496 發(fā)表于 2024-4-24 18:14 | 顯示全部樓層
中斷中用靜態(tài)變量,可以在下次進中斷時,保持上次的值不變
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表