1210|12

2935

帖子

4

TA的资源

五彩晶圆(中级)

楼主
 

C语言如何定义跨文件全局变量 [复制链接]

 

我的问题:C语言如何定义跨文件全局变量。

我有两个C文件和对应的H文件,mem_management.c,mem_mangenent.h,comm.c,comm.h

我在mem_management.c文件中定义uint8_t   freeMem[0x800];变量。

在comm.c中定义 extern *freeMem;

 uint32_t Address = 0x0801C000;
 uint8_t data;
 memset(freeMemo,0,FLASH_PAGE_SIZE +96);
 progm_count = 96;
 for(uint16_t i=0;i<progm_count;i++)
 {
		data = *(__IO uint8_t *)Address++;
	    freeMemo[i] = data;
 }

也就是在通讯开始后接收数据,

然后在另一个函数中也有对函数的操作。发现freeMemo先前接收的数据消失了,好像没有接收过数据一样。

    for(uint16_t i=0;i<dat_length;i++){
	ASC_HEX[receive_buf[i*2+11] -0x30];
	freeMemo[progm_count++] = (ASC_HEX[receive_buf[i*2 + 10] -0x30] << 4) + 
    ASC_HEX[receive_buf[i*2+11] -0x30];
	}
			
	if(progm_count >= FLASH_PAGE_SIZE)
    {
		for(uint16_t i=0;i<FLASH_PAGE_SIZE;i++)
        {
		   flashPage.byte[i] = freeMemo[i];
		}
	    memset(freeMemo,0,FLASH_PAGE_SIZE +96);
	    progm_count = 0;	
				  
	}//write end

请教这是什么原因,如何能够定义一个可以跨文件的全局变量

 

此帖出自编程基础论坛

最新回复

哦哦,测不准原理的体现,哈哈。   详情 回复 发表于 2024-3-28 11:36
点赞 关注
 

回复
举报

1976

帖子

1

TA的资源

五彩晶圆(初级)

沙发
 

在comm.c中定义 extern *freeMem;这种写法编译不会报错?

建议去看一下C语言中extern的作用,应该会对你有帮助

此帖出自编程基础论坛
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

定义一个GlobalVar.c,里面定义变量a,定义一个GlobalVar.h,在里面extern a,然后其他用到这个变量的文件引用Global.h

此帖出自编程基础论坛
 
 
 

回复

6105

帖子

4

TA的资源

版主

4
 
本帖最后由 damiaa 于 2024-3-27 11:38 编辑

现在百度真是牛,问它就告诉你

 

此帖出自编程基础论坛
 
 
 

回复

2935

帖子

4

TA的资源

五彩晶圆(中级)

5
 
bobde163 发表于 2024-3-27 11:27 在comm.c中定义 extern *freeMem;这种写法编译不会报错? 建议去看一下C语言中extern的作用,应该 ...

freeMem[ ] 和*freeMem是等价的,这个程序是因为我使用的keil的调试器的问题

  实际打印出来是没有问题的

 

此帖出自编程基础论坛

点评

指向的是同一个地址?extern的时候也可以不用写变量类型?  详情 回复 发表于 2024-3-27 15:53
 
 
 

回复

1380

帖子

1

TA的资源

五彩晶圆(初级)

6
 

这个应该是C语言常识性的问题,对伐?

如果忘记了救急可以百度,若是学习过程,应该仔细学习C的基础知识吧

此帖出自编程基础论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(中级)

7
 

extern都已经用了,为什么不写成一样的,加个*就变了吧  

此帖出自编程基础论坛
 
 
 

回复

7196

帖子

2

TA的资源

版主

8
 
bigbat 发表于 2024-3-27 11:54 freeMem[ ] 和*freeMem是等价的,这个程序是因为我使用的keil的调试器的问题   实际打印出来是没 ...

指向的是同一个地址?extern的时候也可以不用写变量类型?

此帖出自编程基础论坛
 
 
 

回复

7628

帖子

18

TA的资源

五彩晶圆(高级)

9
 

结果是哪里的问题?

此帖出自编程基础论坛

点评

是我使用keil的调试功能发现,无法取得freeMem的值就以为是程序出问题了,后来使用 uart打印出来就有值了  详情 回复 发表于 2024-3-27 18:02
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

2935

帖子

4

TA的资源

五彩晶圆(中级)

10
 
freebsder 发表于 2024-3-27 17:41 结果是哪里的问题?

是我使用keil的调试功能发现,无法取得freeMem的值就以为是程序出问题了,后来使用

uart打印出来就有值了

此帖出自编程基础论坛

点评

哦哦,测不准原理的体现,哈哈。  详情 回复 发表于 2024-3-28 11:36
把优化功能关了应该就有了  详情 回复 发表于 2024-3-27 18:51
 
 
 

回复

103

帖子

0

TA的资源

一粒金砂(中级)

11
 
bigbat 发表于 2024-3-27 18:02 是我使用keil的调试功能发现,无法取得freeMem的值就以为是程序出问题了,后来使用 uart打印出来就有 ...

把优化功能关了应该就有了

此帖出自编程基础论坛
 
 
 

回复

103

帖子

0

TA的资源

一粒金砂(中级)

12
 

 

此帖出自编程基础论坛
 
 
 

回复

7628

帖子

18

TA的资源

五彩晶圆(高级)

13
 
bigbat 发表于 2024-3-27 18:02 是我使用keil的调试功能发现,无法取得freeMem的值就以为是程序出问题了,后来使用 uart打印出来就有 ...

哦哦,测不准原理的体现,哈哈。

此帖出自编程基础论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表