找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2659|回复: 8
打印 上一主题 下一主题
收起左侧

关于单片机中断服务函数变量问题

[复制链接]
跳转到指定楼层
楼主
ID:550952 发表于 2020-2-27 09:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void Service0(void) interrupt 1
{
        uint i, j;
}
void Service0(void) interrupt 1
{
        static uint i, j;
}
在中断服务函数里使用局部变量和静态变量有什么区别吗?
在实际程序运行时好像没有什么不一样。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:215444 发表于 2020-2-27 12:33 | 只看该作者
你这种写法 我真没用过 你要用静态变量 就卸载函数前面不就好了。。
回复

使用道具 举报

板凳
ID:275826 发表于 2020-2-27 17:22 | 只看该作者
当static关键字修饰局部变量时,只会对该变量初始化一次。

当static关键字修饰局部变量时,该变量在程序中只有一份内存。

当static关键字修饰局部变量时,该变量的作用域不会改变。

当static关键字修饰局部变量时,该变量的生命周期被延长,直到程序结束才销毁。
回复

使用道具 举报

地板
ID:462827 发表于 2020-2-28 09:33 | 只看该作者
用静态变量它只初始化一次,下次中断进入时能继续沿用上一次中断该变量保持的值。
回复

使用道具 举报

5#
ID:169549 发表于 2024-4-22 16:14 | 只看该作者
如是不加STATIC修饰,每进一次中断变量都会重新赋一次初值。
回复

使用道具 举报

6#
ID:828160 发表于 2024-4-22 17:24 | 只看该作者
k455619 发表于 2020-2-27 12:33
你这种写法 我真没用过 你要用静态变量 就卸载函数前面不就好了。。

局部变量,只能在定义的函数里面使用,进入函数时变量的值不确定,使用前要先初始化一下,退出函数后被释放。

静态变量就是只能在这个函数里面使用的全局变量,它有局部变量的特性,也有全局变量的特性,只能在定义的函数里面使用,再次进入函数时会保持之前的状态,退出函数时不会被释放。
回复

使用道具 举报

7#
ID:883242 发表于 2024-4-22 18:05 | 只看该作者
8位单片机因为资源太有限,c语言编译器是静态分配局部变量的,也就是说局部变量是一个固定的地址,楼主两种写法效果大概率会一样,小概率不一样是因为为了高效利用RAM,多个函数可以共用一个局部变量地址,看下map文件就行了。

标准c语言局部变量是在栈上面的,进入函数临时分配,static局部变量是在堆上面跟全局变量在一起,两者执行起来效果就大不相同了。
回复

使用道具 举报

8#
ID:1117825 发表于 2024-4-22 19:58 | 只看该作者
静态变量会保持它的状态,下一次进来依然可以读取到上一次的数值,而且只作用于该函数内
回复

使用道具 举报

9#
ID:195496 发表于 2024-4-24 18:14 | 只看该作者
中断中用静态变量,可以在下次进中断时,保持上次的值不变
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表