历史上的今天
返回首页

历史上的今天

今天是:2025年02月13日(星期四)

正在发生

2020年02月13日 | PICC ---- 各种变量修饰

2020-02-13 来源:eefocus

简介:如果在一个C程序文件中要使用一些变量但其原型定义写在另外的文件中,那么在本文件中必须将这些变量声明成“extern”外部类型。

extern — 外部变量声明


如果在一个 C 程序文件中要使用一些变量但其原型定义写在另外的文件中,那么在本文件中必须将这些变量声明成“extern”外部类型。例如程序文件 code1.c中有如下定义:


bank1 unsigned char var1, var2; //定义了bank1 中的两个变量


在另外一个程序文件 code2.c 中要对上面定义的变量进行操作,则必须在程序的开头定义:


extern bank1 unsigned char var1, var2; //声明位于bank1的外部变量


volatile — 易变型变量声明


PICC 中还有一个变量修饰词在普通的 C 语言介绍中一般是看不到的,这就是关键词“volatile”。顾名思义,它说明了一个变量的值是会随机变化的,即使程序没有刻意对它进行任何赋值操作。在单片机中,作为输入的 IO端口其内容将是随意变化的;在中断内被修改的变量相对主程序流程来讲也是随意变化的;很多特殊功能寄存器的值也将随着指令的运行而动态改变。所有这种类型的变量必须将它们明确定义成“volatile”类型,例如:


volatile unsigned char STATUS @ 0x03;


volatile bit commFlag;


“volatile”类型定义在单片机的 C 语言编程中是如此的重要,是因为它可以告诉编译器的优化处理器这些变量是实实在在存在的,在优化过程中不能无故消除。假定你的程序定义了一个变量并对其作了一次赋值,但随后就再也没有对其进行任何读写操作,如果是非volatile 型变量,优化后的结果是这个变量将有可能被彻底删除以节约存储空间。另外一种情形是在使用某一个变量进行连续的运算操作时,这个变量的值将在第一次操作时被复制到中间临时变量中,如果它是非 volatile 型变量,则紧接其后的其它操作将有可能直接从临时变量中取数以提高运行效率,显然这样做后对于那些随机变化的参数就会出问题。只要将其定义成 volatile 类型后,编译后的代码就可以保证每次操作时直接从变量地址处取数。


const — 常数型变量声明


如果变量定义前冠以“const”类型修饰,那么所有这些变量就成为常数,程序运行过程中不能对其修改。除了位变量,其它所有基本类型的变量或高级组合变量都将被存放在程序空间(ROM 区)以节约数据存储空间。显然,被定义在 ROM 区的变量是不能再在程序中对其进行赋值修改的,这也是“const”的本来意义。实际上这些数据最终都将以“retlw”的指令形式存放在程序空间,但 PICC 会自动编译生成相关的附加代码从程序空间读取这些常数,编程员无需太多操心。例如:


const unsigned char name[]=!±This is a demo!±; 定义一个常量字符串


如果定义了 “const”类型的位变量,那么这些位变量还是被放置在 RAM 中,但程序不能对其赋值修改。本来,不能修改的位变量没有什么太多的实际意义,相信大家在实际编程时不会大量用到。


persistent — 非初始化变量声明


按照标准 C 语言的做法,程序在开始运行前首先要把所有定义的但没有预置初值的变量全部清零。PICC 会在最后生成的机器码中加入一小段初始化代码来实现这一变量清零操作,且这一操作将在 main 函数被调用之前执行。问题是作为一个单片机的控制系统有很多变量是不允许在程序复位后被清零的。为了达到这一目的,PICC 提供了“persistent”修饰词以声明此类变量无需在复位时自动清零,编程员应该自己决定程序中的那些变量是必须声明成“persisten”类型,而且须自己判断什么时候需要对其进行初始化赋值。例如:


persistent unsigned char hour,minute,second; //定义时分秒变量


经常用到的是如果程序经上电复位后开始运行,那么需要将 persistent 型的变量初始化,如果是其它形式的复位,例如看门狗引发的复位,则无需对 persistent 型变量作任何修改。PIC 单片机内提供了各种复位的判别标志,用户程序可依具体设计灵活处理不同的复位情形。


推荐阅读

史海拾趣

Aeroflex公司的发展小趣事

Aeroflex是一家提供高性能测试和测量解决方案的公司,在航空航天、国防、通信和工业等领域拥有广泛的应用。以下是Aeroflex公司发展的五个相关故事:

  1. 公司成立和早期发展: Aeroflex公司成立于1973年,最初是一家由David King在新泽西州创建的小型创业公司,专注于为航空航天和国防行业提供测试和测量设备。随着公司在测试领域的技术积累和市场认可,其业务逐渐扩大,开始在全球范围内提供解决方案。

  2. 技术创新和产品发展: Aeroflex致力于技术创新,不断推出符合行业标准和客户需求的新产品。公司在射频和微波测试领域取得了突破,推出了一系列高性能测试仪器和系统,包括信号发生器、频谱分析仪和网络分析仪等,为客户提供全面的测试解决方案。

  3. 全球扩张和市场拓展: 随着市场需求的增长和业务规模的扩大,Aeroflex逐步在全球范围内建立了广泛的销售和服务网络。公司在美国、欧洲、亚洲和其他地区设立了多个分支机构和办事处,以加强对客户的支持和服务,并拓展新的市场领域。

  4. 公司并购和战略合作: 为加速业务增长和拓展技术能力,Aeroflex通过并购和战略合作不断扩大业务范围。公司先后收购了多家具有先进技术和市场地位的企业,加强了在航空航天、国防和通信等领域的竞争实力。

  5. 成为关键行业供应商: 长期以来,Aeroflex凭借卓越的技术和服务,成为航空航天、国防、通信和工业等关键行业的重要供应商之一。公司在测试和测量领域的领先地位得到了进一步巩固,为客户提供了高品质、可靠的产品和解决方案,赢得了良好的声誉和市场口碑。

HANBIT Electronics公司的发展小趣事

Hamamatsu(滨松光子学株式会社)在电子行业中的发展故事丰富多样,以下是根据公开信息整理的五个相关故事,每个故事均力求准确描述事实:

1. 光电倍增管的创新与突破

Hamamatsu在光电倍增管(PMT)领域取得了显著成就。光电倍增管作为宇宙线观测、中微子实验等高精度探测中的关键器件,其性能和技术要求极高。Hamamatsu抓住市场需求,与东京大学高能物理实验室等科研机构合作,成功研制出大面积探测用光电倍增管,并在多个国际中微子探测实验中得到应用。这一创新不仅推动了Hamamatsu自身的发展,也巩固了其在光电倍增管市场的领先地位。

2. 光电二极管的多样化应用

Hamamatsu的光电二极管产品线广泛,包括硅PIN光电二极管、InGaAs PIN光电二极管等多种类型,广泛应用于医疗生物、高能物理、宇宙探测、精密分析等多个领域。这些产品的多样化应用不仅展示了Hamamatsu在光电技术领域的深厚积累,也为其在全球市场的拓展提供了有力支撑。

3. 光电技术的国际合作与交流

Hamamatsu积极参与国际光电技术的交流与合作,通过举办大型展会、参与国际学术会议等方式,展示其最新的光电技术和产品。例如,Hamamatsu举办的PHOTON FAIR展会,吸引了来自全球的客户和合作伙伴,促进了光电技术的国际交流与合作。这种开放合作的态度,有助于Hamamatsu不断吸收国际先进技术,推动自身技术的持续进步。

4. 应对市场变化的灵活策略

面对电子行业的快速变化,Hamamatsu展现出了高度的市场敏感性和灵活性。当市场需求发生变化时,Hamamatsu能够迅速调整产品结构和研发方向,以满足新的市场需求。例如,在消费电子市场兴起时,Hamamatsu也积极涉足相关领域,推出了一系列适用于消费电子产品的光电传感器件。这种灵活的市场策略,使得Hamamatsu能够在激烈的市场竞争中保持领先地位。

5. 人才培养与团队建设

Hamamatsu深知人才是企业发展的根本动力,因此高度重视人才培养和团队建设。公司建立了完善的人才培养体系,通过内部培训、外部交流等多种方式,不断提升员工的专业技能和综合素质。同时,Hamamatsu还注重团队建设和企业文化建设,营造了一个积极向上、团结协作的工作氛围。这种良好的人才环境和企业文化,为Hamamatsu的持续发展提供了有力保障。

以上五个故事展示了Hamamatsu在电子行业中的发展历程和成就,体现了其在技术创新、市场拓展、国际合作、灵活应变以及人才培养等方面的综合实力。

广州盛炬(GZSJ)公司的发展小趣事

机顶盒,全称为数字视频变换盒(Set Top Box,简称STB),是现代家庭娱乐系统中不可或缺的关键设备。它作为连接电视机与外部信号源的桥梁,能够将接收到的数字电视信号转换成适合电视播放的格式,极大地丰富了用户的视听体验。

机顶盒的起源可追溯至20世纪90年代初,最初是为了解决有线电视收视费问题而设计的解扰设备。随着数字电视技术的发展,机顶盒的功能不断扩展,现已成为集数字信号接收、解码、显示以及多种增值服务于一体的智能终端。

从技术层面看,机顶盒支持多种信号源,包括有线电缆、卫星天线、宽带网络及地面广播等。它不仅能够接收高清、超高清电视节目,还能提供电子节目指南(EPG)、因特网网页浏览、视频点播、游戏等多元化服务。此外,一些先进的机顶盒还集成了智能语音助手、云计算和边缘计算技术,实现了更为便捷、智能的用户交互和内容分发。

在内容创新方面,机顶盒通过与各大内容提供商合作,不断引入优质资源,如电影、电视剧、综艺节目等,并根据用户偏好提供个性化推荐服务。同时,其跨平台整合能力也使得用户可以在不同设备间无缝切换,享受高质量的视频内容。

综上所述,机顶盒作为数字电视技术的核心组成部分,以其强大的功能、丰富的内容和便捷的操作体验,成为了现代家庭娱乐的重要选择。随着技术的不断进步和市场的持续扩大,机顶盒将继续发展,为用户带来更加优质、便捷、智能的观影体验。

乐鑫(espressif)公司的发展小趣事

面对物联网行业的快速发展和变化,乐鑫科技始终保持前瞻性的战略眼光。公司积极布局未来市场,加大在人工智能、云计算等领域的研发投入,以满足客户对更智能化、更高效的物联网应用的需求。同时,乐鑫科技还注重培养和引进优秀人才,为公司未来的发展提供有力的人才保障。

请注意,以上内容仅为概述性质的故事框架,具体细节和数据可能需要根据实际情况进行调整和补充。

C&K公司的发展小趣事

为了进一步加强在全球市场的地位,C&K在2011年进行了一次重要的收购。这次收购不仅扩大了公司的业务范围,还提升了其设计和制造能力。通过这次收购,C&K得以在全球范围内提供更广泛的产品和服务,进一步巩固了其在电子行业中的领先地位。

弘凯光电(BRIGHTEK)公司的发展小趣事

作为一家有社会责任感的企业,弘凯光电始终致力于环保和可持续发展。公司秉承“质量第一”的方针,不仅注重产品的品质和性能,还积极推广环保理念,致力于生产高质量、环保的LED产品。此外,公司还积极参与社会公益活动,回馈社会,为建设环保节能型社会贡献自己的力量。

以上五个故事,基于弘凯光电在电子行业中的发展历程和公开信息,尽量以事实为依据,避免了主观评价。这些故事展示了弘凯光电在技术创新、市场拓展、社会责任等方面的努力和成就,也反映了公司在电子行业中的崛起和影响力。

问答坊 | AI 解惑

颜色识别传感器

本帖最后由 paulhyde 于 2014-9-15 09:44 编辑  …

查看全部问答>

晶体振荡器的工作原理

本帖最后由 paulhyde 于 2014-9-15 09:11 编辑 关键字: 晶振 振荡器 石英晶体 石英晶体振荡器是高精度和高稳定度的振荡器,被广泛应用于彩电、计算机、遥控器等各类振荡电路中,以及通信系统中用于频率发生器、为数据处理设备产生时钟信号和为特 ...…

查看全部问答>

困扰许久的数码管显示问题!

用两个传统的573 控制 数码管显示,奇怪的是单个显示时,一切正常。待到多位扫描显示时,就出现了奇怪的顺序和段码,小弟不才, 望大虾们,不吝赐教! #include <reg52.h> sbit dula=P2^0;sbit wela=P2^1; void delay(int i){ int j=1 ...…

查看全部问答>

鼠标指针的刷新问题

加了USB鼠标,能够显示鼠标指针。只移动鼠标,显示正常。点击鼠标时,不论左右键,鼠标指针背景就不对了,看起来是上一帧的图案。在右键菜单上下移动鼠标就会留下一行轨迹。 平时移动鼠标,没有异常,那么显示驱动里SetPointerShape应该是对的吧。 ...…

查看全部问答>

各位老师,我是新手,请教Plc931直接ad转换的问题

我在公司里做毕业设计,采用lpc931单片机,想把一个十六位的数字量用单片机的Pwm功能给转换成模拟量,pwm输出采用rc滤波,但具体的c程序该怎么写呢?请指教!!…

查看全部问答>

新型测试仪器如何减少机架所占空间

Andrew Armutat 产品市场部 吉时利仪器公司   减少机架所占空间。新的吉时利SMU采用了2U[1]高的半机架设计,大大提高了机架密度。在实际情况下,基于该设计的自动化系统容量很容易集成几个到16个通道,甚至于128通道[2]也是有可能的 ...…

查看全部问答>

STM32 USART串口中断

 main(void)  {    /*PC4  PC13 PB10 PA0 */  USART_InitTypeDef USART_InitStructure;  USART_InitStructure.USART_BaudRate = 9600;  USART_InitStructure.USART_WordLength = USART_WordLengt ...…

查看全部问答>

使用usb(ch376或者ch375)完成PC和FPGA的通信

只是读写。   写,pc上的信息通过USB写如FPGA在数码管上显示。   读,读FPGA,ram里的信息,传给PC。 现在编verilog代码出现问题了。 谁要是有这个代码更好。 如果没有我想问一下,CH376并行通信的芯片中断管脚是怎么 ...…

查看全部问答>

点亮一个数码管

  之前虽然在开发板上学习了74HC573,但是当时连它的datasheet都没怎么看,就照着程序来写,所以对很多的芯片都不是很了解,对芯片很迷茫。终于决定要把以前做的试验在面包板上搭一遍体验体验。所以就有了今天的实验。经过几个小时的努力 ...…

查看全部问答>