51单片机程序变量作用域问题
问题:
//为什么下面这个程序可以运行
#include <REGX52.H>
#include "LCD1602.h"
#include "Delay.h"
unsigned int result = 0;
void main(){LCD_Init();while(1){LCD_ShowNum(1,1,result,3);Delay(200);result++;};
}
//但是这样会报错:
#include <REGX52.H>
#include "LCD1602.h"
#include "Delay.h"
void main(){LCD_Init();
unsigned int result = 0;while(1){LCD_ShowNum(1,1,result,3);Delay(200);result++;};
}
这两个程序的差异在于变量 result
的作用域和C语言的语法标准限制:
第一个程序(正常运行)
unsigned int result = 0; // 全局变量
void main() {LCD_Init();while(1) {// 使用 resultresult++;};
}
- 全局变量:
result
声明在全局作用域,生命周期覆盖整个程序运行,可在main
函数中正常读写。
第二个程序(报错)
void main() {LCD_Init();unsigned int result = 0; // 局部变量,声明在语句之后while(1) {// 使用 resultresult++;};
}
- 局部变量声明位置问题:在C89/C90标准中,所有局部变量必须在函数或代码块的开头声明(即在任何执行语句之前)。此代码中,
result
的声明位于LCD_Init()
调用之后,违反了这一规则,导致编译错误。
根本原因
- C语言标准兼容性:编译器(如Keil的默认配置)可能遵循C89标准,要求局部变量声明集中在代码块开头。C99及之后的标准允许在代码任意位置声明变量,但部分嵌入式编译器默认使用C89模式。
解决方案
将局部变量声明移至函数体开头:
void main() {unsigned int result = 0; // 符合C89规则LCD_Init();while(1) {// 使用 resultresult++;};
}
总结
第二个程序因违反C89的变量声明位置规则而报错,修正声明位置即可解决。全局变量不受此限制,因而第一个程序能正常运行。
相关文章:
51单片机程序变量作用域问题
问题: //为什么下面这个程序可以运行 #include <REGX52.H> #include "LCD1602.h" #include "Delay.h" unsigned int result 0; void main(){LCD_Init();while(1){LCD_ShowNum(1,1,result,3);Delay(200);result;}; } //但是这样会报错&a…...
力扣算法ing(33 / 100)
3.20 146.LRU缓存 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值&…...
基于springboot的母婴商城系统(018)
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本母婴商城系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&am…...
【数学建模】模糊综合评价模型详解、模糊集合论简介
模糊综合评价模型详解 文章目录 模糊综合评价模型详解1. 模糊综合评价模型概述2. 模糊综合评价的基本原理2.1 基本概念2.2 评价步骤 3. 模糊综合评价的数学模型3.1 数学表达3.2 模糊合成运算 4. 模糊综合评价的应用领域5. 模糊综合评价的优缺点5.1 优点5.2 缺点 6. 模糊综合评价…...
BSCAN2-1:load design
1. DFT Flow Using Tessent Shell Tessent BoundaryScan 具有一个基本的高层次流程顺序。下图展示了将 Tessent BoundaryScan 插入设计所需的高层次步骤顺序。图中的每个步骤都链接到有关可测试性设计(DFT)流程的更详细信息,包括示例。 Desi…...
Pytorch中layernorm实现详解
平时我们在编写神经网络时,经常会用到layernorm这个函数来加快网络的收敛速度。那layernorm到底在哪个维度上进行归一化的呢? 一、问题描述 首先借用知乎上的一张图,原文写的也非常好,大家有空可以去阅读一下,链接放…...
Redis HyperLogLog
Redis HyperLogLog HyperLogLog 是 Redis 提供的一种基数估算(Cardinality Estimation)数据结构,专门用于统计去重元素的数量(近似值)。 1. HyperLogLog 特点 ✅ 节省内存:无论存储的元素有 10 个 还是 …...
【微服务日志收集①】使用FileBeat+Logstash+ES搭建ELK日志系统
使用FileBeatLogstashES搭建ELK日志系统,架构图如下: 1、 使用docker快速创建ES服务和Kibana服务 前置条件:需要在linux上提前安装好docker和docker-compose 1.1、在linux创建好一个用于存放docker-compose配置文件的文件夹 我的目录是/app/…...
【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(10)
1.问题描述: 离线推送,锁屏的时候没有弹出消息,只有下拉在通知中心里面显示。请问是否是正常的? 解决方案: 检查一下是否存在图片风控:https://developer.huawei.com/consumer/cn/doc/harmonyos-referen…...
Django之旅:第二节--启动运行django
1、确保app已配置完(settings.py文件里面配置) INSTALLED_APPS [django.contrib.admin,django.contrib.auth,django.contrib.contenttypes,django.contrib.sessions,django.contrib.messages,django.contrib.staticfiles,app.apps.AppConfig #配置已经注册好的app…...
Redis Sentinel(哨兵模式)高可用性解决方案
一、概述 Redis Sentinel(哨兵模式)是Redis的高可用性(High Availability, HA)解决方案,它通过哨兵系统和Redis实例的协同工作,确保了Redis服务的高可用性和数据的持久性。哨兵系统由一个或多个哨兵进程组…...
Redis缓存与数据库 数据一致性保障
为什么要保证数据一致性 只要使用redis做缓存,就必然存在缓存和DB数据一致性问题。若数据不一致,则业务应用从缓存读取的数据就不是最新数据,可能导致严重错误。比如将商品的库存缓存在Redis,若库存数量不对,则下单时…...
Grid 布局实现三栏布局
使用 CSS Grid 布局实现三栏布局(左右固定 100px,中间自适应)的核心原理是通过网格模板精确控制列宽分配。以下是具体实现方法及优化技巧: 一、基础实现 父容器设置 为外层容器添加 display: grid 使其成为网格容器,并通过 grid-template-columns 定义列宽 css .contain…...
如何在 HTML 中创建一个有序列表和无序列表,它们的语义有何不同?
大白话如何在 HTML 中创建一个有序列表和无序列表,它们的语义有何不同? 1. HTML 中有序列表和无序列表的基本概念 在 HTML 里,列表是一种用来组织信息的方式。有序列表就是带有编号的列表,它可以让内容按照一定的顺序呈现&#…...
springboot第三站(1) web开发引入
目录 1.简介 2.SpringBoot对静态资源的映射规则 3.模版引擎 1.简介 使用SpringBoot; 1)、创建SpringBoot应用,选中我们需要的模块; 2)、SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定…...
nginx 简单实践:负载均衡【nginx 实践系列之四】
〇、前言 本文为 nginx 简单实践系列文章之三,主要简单实践了负载均衡,仅供参考。 注意:可以使用测试域名,但前提是要修改 hosts 文件 路径和重启:Linux(/etc/hosts)(重启命令&#…...
CentOS 7.9 安装 Python 3.10 详细步骤及常见问题解决
一、环境准备与依赖安装 更新系统与开发工具 sudo yum update -y sudo yum groupinstall "Development Tools" -y sudo yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel \ readline-devel tk-devel libffi-devel gdbm-devel db4-de…...
计算机网络-1-1计算机网络体系结构
第一章计算机网络体系结构 绪论 《计算机网络》学什么?——数据如何通过网络正确、可靠地从A传送到B 【考纲内容】 (一)计算机网络概述 计算机网络的概念、组成与功能;计算机网络的分类; 计算机网络的性能指标 (二)计算机网…...
集装箱箱号OCR识别技术,在铁路物流场站集装箱装卸机械数字化系统中的应用
集装箱装卸机械数字化是针对铁路物流场站的门式起重机、集装箱正面吊运起重机、重型叉车、堆高机等作业设备,在不影响原设备作业性能情况下,通过增加或集成集装箱箱号OCR识别或者车号识别装置、北斗定位装置、PLC采集装置等,利用多种通信协议…...
数仓工具—Hive语法之不同纬度聚合
不同纬度聚合 提到不同纬度聚合,大家想到的肯定是grouping sets,或者是cube和rollup 其实这些我们之前都讲过,可以看看之前的文章 数仓工具—Hive语法之cube和rollup 数仓工具—Hive语法之grouping sets 但是我们今天遇到的问题是,使用的工具不支持grouping sets,既然…...
GitHub在push推送到远程仓库的时候显示Logon failed登录失败
具体问题描述 git.exe push --progress "origin" master:master Logon failed, use ctrlc to cancel basic credential prompt. remote: Support for password authentication was removed on August 13, 2021. 这是因为Git 推送失败的原因是 GitHub 已经不支持密码认…...
【Dive Into Stable Diffusion v3.5】1:开源项目正式发布——深入探索SDv3.5模型全参/LoRA/RLHF训练
目录 1 引言2 项目简介3 快速上手3.1 下载代码3.2 环境配置3.3 项目结构3.4 下载模型与数据集3.5 运行指令3.6 核心参数说明3.6.1 通用参数3.6.2 优化器/学习率3.6.3 数据相关 4 结语 1 引言 在人工智能和机器学习领域,生成模型的应用越来越广泛。Stable Diffusion…...
2025-03-19 Unity 网络基础2——网络通信基础
文章目录 1 数据通信模型1.1 C/S 模型1.2 B/S 模型1.3 P2P 模型1.4 小结 2 网络协议2.1 OSI 模型2.1.1 下层2.1.2 上层 2.2 TCP/IP 协议2.2.1 TCP 协议2.2.2 UDP 协议 3 网络游戏通信方案3.1 强/弱弱联网游戏3.2 长/短连接游戏3.3 相关术语 1 数据通信模型 在早期的计算机网…...
路由器安全研究:D-Link DIR-823G v1.02 B05 复现与利用思路
前言 D-Link DIR-823G v1.02 B05存在命令注入漏洞,攻击者可以通过POST的方式往 /HNAP1发送精心构造的请求,执行任意的操作系统命令。 漏洞分析 binwalk提取固件,成功获取到固件。 现在我们已经进入到应用里了,那么我们在进行分析…...
【蓝桥杯python研究生组备赛】005 数学与简单DP
题目1 01背包 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 vi,价值是 wi。 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。 输出最大价值。 输入格式 第一行两个整数&a…...
数据仓库是什么,跟数据集成有什么关系
在当今数字化时代,数据已成为企业决策的重要依据。数据仓库作为企业数据管理的核心组件,其重要性不言而喻。那么,数据仓库到底是什么?它与数据集成又有着怎样的关系呢?本文将深入探讨这些问题。 一、数据仓库…...
鸿蒙NEXT项目实战-百得知识库01
代码仓地址,大家记得点个star IbestKnowTeach: 百得知识库基于鸿蒙NEXT稳定版实现的一款企业级开发项目案例。 本案例涉及到多个鸿蒙相关技术知识点: 1、布局 2、配置文件 3、组件的封装和使用 4、路由的使用 5、请求响应拦截器的封装 6、位置服务 7、三…...
【微服务】SpringBoot整合LangChain4j 操作AI大模型实战详解
目录 一、前言 二、Langchain4j概述 2.1 Langchain4j 介绍 2.1.1 Langchain4j 是什么 2.1.2 主要特点 2.2 Langchain4j 核心组件介绍 2.3 Langchain4j 核心优势 2.4 Langchain4j 核心应用场景 三、SpringBoot 整合 LangChain4j 组件使用 3.1 前置准备 3.1.1 获取apik…...
rust学习笔记16-206.反转链表(递归)
rust函数递归在14中已经提到,接下来我们把206.反转链表,用递归法实现 递归函数通常包含两个主要部分: 基准条件(Base Case):递归终止的条件,避免无限递归。 递归步骤(Recursive Ste…...
Unity 中实例化预制体的完整过程
1.资源加载(Load Asset to Memory) Unity 的资源加载是指将各种资源(如模型、纹理、音频、预制体 等)从存储介质(如磁盘、AssetBundle、远程服务器)到运行时内存的过程,使其成为可用的资源&…...
Unity动画片段丢失(AnimationClip),如何进行重新绑定
从外部导入的AnimationClip存在黄色丢失的missing提示,这时候不需要重新制作动画,只需要重新绑定动画即可。 我们以第一条Intro1:Anchored Position(缺失!)为例 第一步:双击动画中的Intro1条目,可以查看片段存储该动画的对应路径…...
mysql5.7主从部署(docker-compose版本)
mysql5.7主从部署(docker-compose版本) 1:docker-compose-test.yml 文件信息 version: 3services:# MySQL 数据库mysql-master:image: mysql:5.7container_name: mysql-masterenvironment:MYSQL_ROOT_PASSWORD: 123456MYSQL_DATABASE: nacosports:- 23…...
模型部署实战:PyTorch生产化指南
一、为什么要做模型部署? 模型部署是将训练好的模型投入实际应用的关键步骤,涉及: 模型格式转换(TorchScript/ONNX)性能优化(量化/剪枝)构建API服务移动端集成 本章使用ResNet18实现图…...
SQLMesh 系列教程:Airbnb数据分析项目实战
在本文中,我们将探讨如何利用dbt项目的代码库来实现一个简单的SQLMesh项目。本文的基础是基于Udemy讲师为dbt课程创建的示例项目,可以在这个GitHub repo中获得。这个dbt项目是相对完整的示例,我们将使用它作为模板来演示SQLMesh(下…...
LeetCode hot 100 每日一题(11)——189. 轮转数组
这是一道难度为中等的题目,让我们来看看题目描述: 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3…...
VLAN综合实验
一、实验拓扑 二、实验要求 1、PC1/3处于同一个网段,所在接口为access,属于VLAN 2。 2、PC2/4/5/6处于同一网段。 3、PC2可以访问PC4/5/6。 4、PC4可以访问PC5,但不能访问PC6。 5、PC5不能访问PC6。 6、所有PC通过DHCP获取IP地址&#…...
杨辉三角(js实现,LeetCode118)
看到这道题我的第一反应是找规律,核心突破点是numRows这个参数,杨辉三角的第numRows行拥有的元素数量为numRows个,并且头尾都是1,由此我们可以通过双层for循环,先生成每一行的数组,然后将每一行的数组push进…...
C语言复习笔记--数组
今天继续来浅浅推进一下C语言的复习,这次是数组的复习,话不多说,正文开始. 数组的概念 数组是⼀组相同类型元素的集合,一种自定义类型.数组中元素个数不能为0.数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组. 下面从一维数组说起. 一维数组的创建和…...
Linux操作系统实验报告单(3)文本编辑器vi/vim
一、实验目的 掌握vi/vim编辑器的进入和退出方式了解vi/vim的三种模式熟练vi/vim的操作命令 二、实验内容 1.在家目录下新建一个名为“vitest_name”(“name”为学生姓名拼音)的目录。 ●创建用户目录命令:sudo mkdir /home/vitest_lw3613 …...
docker linux 常用操作命令
以下是 Docker 的常见操作命令及其简单介绍,帮助你快速上手 Docker 的基本使用: 1. 镜像操作 拉取镜像 docker pull 镜像名称:标签示例: docker pull ubuntu:20.04从 Docker Hub 拉取 Ubuntu 20.04 镜像。 拉取镜像 docker build -t"…...
除自身以外数组的乘积——面试经典150题(力扣)
题目 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时…...
打破煤矿通信屏障,无线系统赋能生产安全与智能进阶
项目背景 在煤矿行业智能化转型的浪潮中,七台河矿业局积极回应国家煤矿智能化建设的号召,采取了具有前瞻性的战略举措——在七台河地区的煤矿部署了“井上井下”无线覆盖与广播一体化系统。此举旨在消除井上与井下之间的通信障碍,加强矿业局与…...
DeepSeek + Kimi 自动生成 PPT
可以先用deepseek生成ppt大纲,再把这个大纲复制到Kimi的ppt助手里: https://kimi.moonshot.cn/kimiplus/conpg18t7lagbbsfqksg 选择ppt模板: 点击生成ppt就制作好了。...
Blender标注工具
按住键盘D键 鼠标左键绘制 / 右键擦除 也可以在上方选择删除...
鸿蒙开发:远场通信服务rcp拦截器问题
前言 本文基于Api13。 上篇文章,简单的对rcp中的会话问题做了概述,本篇文章,我们聊一聊rcp中的拦截器问题,按照正常开发,其实拦截器中也不存在问题的,毕竟都是很官方的开发方式,但是在结合了创建…...
调研报告:Hadoop 3.x Ozone 全景解析
Ozone 是 Hadoop 的分布式对象存储系统,具有易扩展和冗余存储的特点。 Ozone 不仅能存储数十亿个不同大小的对象,还支持在容器化环境(比如 Kubernetes)中运行。 Apache Spark、Hive 和 YARN 等应用无需任何修改即可使用 Ozone。Ozone 提供了 Java API、S3 接口和命令行接口…...
Thinkphp 多文件压缩
控制器 <?phpnamespace app\api\controller; use think\Controller; use think\facade\Db; use think\facade\Request;use ZipArchive;class DrugTestResult {public function download(){if(Request::isPost()){$data Request::post();$idnumber Request::param(idnumb…...
NGINX中的反向代理实践
以下是一个全面和优化的配置示例,包括了错误处理、超时设置、头部信息调整等: server {listen 80;server_name your.domain.name; # 替换为你的实际域名或IP地址# 前端应用的静态资源处理location / {root /path/to/vue/dist; # Vue 应用的dist目录try_…...
redis分布式锁实现Redisson+redlock中watch dog是如何判断当前线程是否持有锁进行续租的呢?
在 Redis 中,Watch Dog(看门狗)机制主要用于实现分布式锁的自动续期(如 Redisson 的 RedLock 实现)。其核心目的是确保当业务逻辑执行时间超过锁的初始过期时间(leaseTime)时,锁不会…...
[spring] Spring JPA - Hibernate 多表联查 1
[spring] Spring JPA - Hibernate 多表联查 1 之前在 [spring] spring jpa - hibernate 名词解释&配置 和 [spring] spring jpa - hibernate CRUD 简单的学习了一下怎么使用 Hibernate 实现 CRUD 操作,不过涉及到的部分都是逻辑上比较简单的实现——只在一张表…...