找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 718|回复: 2
收起左侧

C语言使用static关键字命名变量后发现变量不动

[复制链接]
ID:1115217 发表于 2024-5-1 11:55 | 显示全部楼层 |阅读模式
如题,这个帖子算一个小记吧,就是去掉static后变量达到我想要的效果了,我以为必须加static才有这样的效果呢

  1. #include "delay.h"
  2. #include "sys_other.h"
  3. #include "timer.h"
  4. #include "Key.h"

  5. uint8_t KeyNum;
  6. uint16_t val=1440;


  7. int main(void)
  8. {               
  9.    delay_init();                     //延时函数初始化        
  10.     Key_Init();        
  11.     LED_Init();
  12.       NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  13.      TIM4_PWM_Init(7199,0);         //不分频。PWM频率=72000000/(900)(0+1)=80Khz
  14.      while(1)
  15.        {        

  16.           KeyNum = Key_GetNum();    //将 Key_GetNum() 返回值给KeyNum                 
  17.           TIM_SetCompare1(TIM4,3600);                //TIM4->CCR1=400                                         
  18.           TIM_SetCompare2(TIM4,val);            //TIM4->CCR2=800
  19.          if (KeyNum == 1)
  20.            {
  21.              val+=360;
  22.            }
  23.           if (val > 7200)
  24.            {
  25.               val=1440;
  26.            }
  27.      }
  28. }
复制代码
就是开始的这个uint16_t val=1440; 加了static后,怎么按按键占空比都不变,把static去了之后反而正常了,也能满足要求,之前我很担心程序每次循环一次val都会被重置,但是看了看示波器发现并未出现我担心的情况


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:57657 发表于 2024-5-2 13:21 | 显示全部楼层
楼主没有说清楚此C语言是什么操作系统运行的。
static是静态变量的意思,编译器会为该变量分配固定地址,函数返回后变量的值不会丢失。
回复

使用道具 举报

ID:307544 发表于 2024-5-3 21:04 | 显示全部楼层
楼主uint16_t val是全局变量,根本不要static,一般static用在一个函数内的变量,每次调用函数内部static的变量都是上次的值
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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