精华内容
下载资源
问答
  • 建立3个文件分别是 MainMap.h SlaveMap.h MainMap.h//===============================================================MainMap.h文件添加在main.c即可 例如:#include "stm32f10x_lib.h"#include "MainMap.h" //...

    建立3个文件分别是 MainMap.h     SlaveMap.h    MainMap.h//===============================================================

    MainMap.h文件添加在main.c即可  例如:

    #include "stm32f10x_lib.h"

    #include "MainMap.h"      //添加在库的头文件下即可

    MainMap.h文件内容

    #define Eu32 u32

    #define Eu16 u16

    #define Eu8 u8

    #define Euc32 uc32

    #define Euc16 uc16

    #define Euc8 uc8

    #include "RamMap.h"

    //===============================================================

    //===============================================================

    SlaveMap.h文件添加在main.c以外的头文件里(只要main.c以外的文件用到全局变量就一定要添加)即可  例如

    #include "stm32f10x_lib.h"

    #include "SlaveMap.h"      //添加在库的头文件下即可

    SlaveMap.h文件内容

    #define Eu32 extern u32

    #define Eu16 extern u16

    #define Eu8 extern u8

    #define Euc32 extern uc32

    #define Euc16 extern uc16

    #define Euc8 extern uc8

    #include "RamMap.h"

    //===============================================================

    MainMap.h文件内容如下

    Eu16 Lcd;     //这个Lcd就是全局变量了,是否很简单呢

    download.gif附上上面的3个文件!

    展开全文
  • 描述今天在写SysTcik_Handler()这个中断函数时,总是报错,明明在开头定义全局变量extern u16 ntime,(ntime--写在stm32f10x_it.c的systick中断函数中)但是编译时总是报错,百度之后才有了解决方法,之前也注意到...

    描述

    今天在写SysTcik_Handler()这个中断函数时,总是报错,明明在开头定义的全局变量extern u16 ntime,(ntime--写在stm32f10x_it.c的systick中断函数中)但是编译时总是报错,百度之后才有了解决方法,

    362def6e1af30c0ca1933ce90a5d1092.png

    之前也注意到过extern变量,但是没有仔细思考过它的使用方法,今天碰到了,一定要把它弄明白,把这个关键字的一般作用弄清楚(仅仅是一般作用,C的博大精深不敢妄谈);

    当你建立一个头文件库时,经常会遇到一个问题,就是在A文件中定义一个temple变量,想把它的值传递给B文件使用,但是A文件操作中函数又不可以带返回参数,比如说中断服务函数,那该怎么办?如果你把temple定义在A中,然后让A.h和B.h包含在includes.h中,然后把includes.h放在A.c和B.c中单个编译是没有问题的,但是链接的时候会出现问题,

    “Symbol temple multiply defined(by A.o and B.o)”

    意思是这个变量被多次定义了!!!

    解决的方法是:

    在A中定义temple变量后,在B中用extern 声明一下就可以了,例如:

    1.在A中定义temple并且赋值:u16 temp2=0;

    2.在B中声明extern u16 temp2;

    7a60302e7c384c7d107ac115e4bb79be.png

    这里只是声明,不再赋值,否则会报错!

    Symbol temp2 multiply defined (by catch_pwm.o and app.o)

    这里要注意变量定义和变量声明的区别:

    变量定义使用“数据类型+变量名称”的形式,编译器需要给它分配内存单元的;

    而变量声明使用“extern 变量类型+变量名称”的形式,是告诉编译器我这个变量将在其他外部C文件中定义,我这里只是在外部用它。编译器就不会给它分配内存空间,而等到真正遇到变量定义时再给它分配内存空间。

    //以下是“聚海”de帖子///

    1、普通变量定义成全局变量

    如果是普通类型,完全可以不用*.h文件,直接在*.c文件中定义,在调用文件处用extern 声明,因为对于普通类型,编译器是可以识别的。比如在一个 my.c文件中,我定义了char name[10];那么在别的文件中只要用extern char name[](由于是声明,一位数组可以省略大小,但不建议用指针,比较指针和数组是两回事)外部声明就可以了,告诉编译器这个变量我已经定义过了,具体怎样,你慢慢找吧。这符合常理,因为char是编译器能自主识别的类型。

    2、自定义结构体类型定义成全局变量

    不同于普通类型,如果不预先通知编译器,编译器是不会识别你自定义的类型的。这个时候,*.h文件便出现了。不是定义结构类型不占内存吗?那好,我大结构体的定义放在*.h文件中,这样一来,无论你incude无数次,内存都不会被占用的。而且这样还有个好处,在别的文件中可以include这个*.h文件,这样,在这个文件中,编译器就可以识别你的自定义类型了,目的不就达到了?假如我在global.h中定义了

    typedef struct _POSITION

    {

    int x;

    int y;

    }POSITION;

    那么我可以在一个global.c文件中实现全局变量的定义,不过要include那个*.h文件,比如

    include “global.h”

    POSITION current,;

    这样就定义了cunrrent这个变量,在别的文件中引用这个变量时,只要extern POSITION current;进行声明,然后就可以用了,不过这个文件也还得include “global.h” 因为如果不包含,在这个文件中是不识别POSITION类型的。

    1.如何引用一个已经定义过的全局变量?

    答:extern  可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。

    2.全局变量可不可以定义在可被多个.C文件中?为什么?

    答:可以,在不同的C文件中以static形式来声明同名全局变量。  可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。

    OVER!

    打开APP阅读更多精彩内容

    点击阅读全文

    展开全文
  • 在自己的产品测试中 子机正常模式下运行毫无问题 都...lcd花屏 肯定是全局变量自己变化了的 是内存泄露或者覆盖问题串口接收死机 并非子机死机 ,而是串口接收不到数据了。实验中 接收不到数据的现象可以分为下面...

    在自己的产品测试中 子机正常模式下运行毫无问题 都正常

    但是远程主机端 一直发送数据 ,就会导致产品lcd花屏 串口死机

    而且显示lcd花屏 串口后面才死机的的 两者死机间隔时间有长有短 不必深究,通过其他没有接在总线上的子机对比来看 是串口惹的货。

    lcd花屏 肯定是全局变量自己变化了的 是内存泄露或者覆盖问题

    串口接收死机 并非子机死机 ,而是串口接收不到数据了。

    实验中 接收不到数据的现象可以分为下面原因

    1 这里的接收不到数据我们不能单一的理解为串口中断死掉了 这是不可能的(通常情况下)

    2 我们接收中断被发射中断阻挡了即 发送中断 一直在发数据(之前是死循环等待发送完成 而呈现中有看门狗 所以这种情况也很小 不过现在我还是加上超时处理了)

    3 接收中断中接收的 管道形式的buf 一直接收超出了管道值 那么管道没有清空的同时 管道没有继续接收了 算是溢出了吧 同时造成了内存泄露(非常有可能)

    当前修改了修改了接收中断中数据进行初步过滤来处理每时每刻总线上的无用数据。

    当前修改了这个的方面测函数 程序正在测试中 耐心等待吧

    25246168dc4db5406d763ac5219a9728.png

    1ed803715e90b568db6c74f7005928ee.png

    测试了 发现lcd不花屏了 但是某一时刻 还是出现了 “ 串口死掉 ”的现象

    然后我在程序中 估计仍然是接收问题 程序设计中管道接收满了 就不接收了 。即当子机数据只进不出的现象出现时 一段时间后管道就装满了 这之后 就造成了接收的数据丢掉了。当前的措施是管道移动 就是丢掉头上的数据 尾巴上放入新的数据 这样就的现象就是老的数据 你不来取 我就扔掉了。后面的新的数据 依次接入 当前思路是这样的 不知道行不行 待测试中

    6ff02952505b0930a979a7480bcfd256.png

    展开全文
  • 1.ST Visual Develop 开发环境下.h文件里面不能定义变量,要把变量定义在.C文件里面,然后在.H文件里面声明即可。补充:今天突然发现还有一种情况,变量在一个.h文件里定义后,在另外的一个.h文件里做extern声明后也...

    1.ST Visual Develop 开发环境下.h文件里面不能定义变量,要把变量定义在.C文件里面,然后在.H文件里面声明即可。补充:今天突然发现还有一种情况,变量在一个.h文件里定义后,在另外的一个.h文件里做extern声明后也可以,后来发现,这两个.h文件都没有自己的.c文件以及都是在工程文件的同层路径而不是在模块的文件里面。

    2.ST Visual Develop 开发环境如果出现进入或者退出DEBUG很慢,或者菜单栏消失这类问题,就是工程文件出现了异常,只要新建工程或者把近期OK的工程文件拷过来替换掉即可,不过后者可能不彻底,建议用前者去解决。

    转载于:https://www.cnblogs.com/mico-liu/p/4768794.html

    展开全文
  • STM32全局变量定义和声明

    万次阅读 2020-03-19 17:04:11
    STM32全局变量定义和声明 今天在写SysTcik_Handler()这个中断函数时,总是报错,明明在开头定义全局变量extern u16 ntime,(ntime–写在stm32f10x_it.c的systick中断函数中)但是编译时总是报错,百度之后才有...
  • STM8全局变量溢出问题解决

    千次阅读 2016-01-27 10:27:17
    STM8S105系列CPU的RAM地址范围为0~0x7FF的2K空间,其中默认将高512字节分配给堆栈,剩下0~0x5FF字节为变量存储空间 。在0~0x5FF的空间范围内,低256字节被定义为Zero page,其中包括.bsct,.ubsct,.bit,.share,各...
  • 那么sButtonTick的值会正常的每10ms增加1,但是在仿真的过程中,将按键长按不松开,在变量窗口中动态显示却发现该值的变化速度特别快,而且值大于系统滴答计时器的计时时间,该值使用u16 类型进行定义,经常会跑到...
  • 在自己的产品测试中 子机正常模式下运行毫无问题 都正常 ...lcd花屏 肯定是全局变量自己变化了的 是内存泄露或者覆盖问题 串口接收死机 并非子机死机 ,而是串口接收不到数据了。 实验中 接收不到数...
  • debug跟进去看不出什么逻辑错误,但发现函数内局部变量声明之后,全局变量的值被清零,后来查看局部变量地址已经超出栈的范围,于是确定是栈溢出。如果不稍微了解一下堆栈,在开发过程中可能碰到各种奇怪的错误。....
  • 哈佛和冯诺依曼,从STM32的const全局变量说起

    千次阅读 多人点赞 2017-07-22 13:22:01
      昨天在STM32程序中,把全局变量定义成const属性时,发现它所处的位置是在STM32内置的FLASH而非内置的SRAM中。顿时让我觉得十分奇怪,程序不都必须在RAM中运行?即使在静态常量区不也应该放在SRAM中?   ...
  • stm32下了解全局变量、局部变量、堆、栈对分区的了解各区特点stm32下实现对分区的了解 对分区的了解 在一个STM32程序代码中,从内存高地址到内存低地址,依次分布着栈区、堆区、全局区(静态区)、常量区、代码区,...
  • STM32单片机extern全局变量

    千次阅读 2020-10-27 16:44:14
    当你建立一个头文件库时,经常会遇到一个问题,就是在A文件中定义一个temple变量,想把它的值传递给B文件使用,但是A文件操作中函数又不可以带返回参数,比如说中断服务函数,那该怎么办? 如果你把temple定义在A中...
  • 最近在研究怎么把代码编译到自己想要的位置,然后只运行一次就自宫,分享一下。 方法一: void fun(void) __attribute((section(".ARM.__at_0x...定位变量: int val attribute((section(".ARM.__at_0x20000000"))) =
  • STM8使用----STVD(COSMIC)定义变量指定其类型和位定义http://www.51hei.com/bbs/dpj-31009-1.html(出处: 单片机论坛)stm8 stvd下 near等于51的xdatatiny等于51的idata如何分配变量到指定的地址举例:unsigned char ...
  • stm32xxxx.it.c 有一... //定义边且赋值 在main.c中 extern uint8_t key_num; //声明变量,不赋值!! 假设,key.c也要使用key_num 那么可以使用静态变量进行声明变量 static extern uint8_t key_num; ...
  • STM32全局变量占用程序存储空间吗?

    千次阅读 2015-01-04 20:09:47
    全局变量是否占用最终程序的存储空间,这个问题其实早在我们学习C语言的时候就已经告诉我们答案了。我隐约记得初学C语言的时候,书本上告诉我们: 全局自动变量——保存在读写数据段 全局静态变量——保存在读写...
  • STM32如何定义变量到FLASH ROM中

    千次阅读 2016-04-11 11:12:58
    FLASH,RAM在同一个逻辑地址空间的,都是直接用用const,如arm,stm8,msp430等。 FLASH,RAM逻辑地址空间分开的,要用其它办法,通常是特殊关键字,__flash,__code等。 如AVR,8051等。 注:const本身并没有...
  • 8 1001 9 1010 10 11111111 255 十六进制和十进制 十六进制 十进制 十六进制 十进制 0 0 B 11 1 1 C 12 2 2 D 13 3 3 E 14 4 4 F 15 5 5 10 16 6 6 11 17 7 7 12 18 8 8 13 19
  • STM32 keilC 局部变量和全局变量

    千次阅读 2013-05-15 22:48:05
    keil C中的局部变量是放在栈中,而栈大小在启动文件中设置好了的,所以在写函数的局部变量的时候不应该定义大的数组,不然栈不够装,就会就会导致局部变量的地址和全局变量的地址重叠。
  • 项目使用STM32L051C8T6,遇到一个奇怪问题:当增加全局变量或将全局数组增大(仅是从7个数组元素增加到10个)或将某段代码定义为函数进行调用时,程序都会100%死机(不是偶尔死机),有时某个全局变量的值还被莫名...
  • 二、STM32的USART串口通信程序实例三、C语言程序里全局变量、局部变量、堆、栈等概念,在ubuntu系统中编程,输出信息进行验证四、stm32的堆、栈、全局变量的分配地址 一、基于寄存器与基于固件库的stm32 LED流水灯...
  • STM32关于堆栈,局部变量全局变量内存分配的问题 开发环境:IAR for ARM 8.30.1 MCU:STM32F103RCT6 以一个简单的bootloader程序为例,先来看看map文件中的内存分配: ***************************************...
  • stm32的堆、栈、全局变量的分配地址 在一个STM32程序代码中,从内存高地址到内存低地址,依次分布着栈区、堆区、全局区(静态区)、常量区、代码区,其中全局区中高地址分布着.bss段,低地址分布着.data段。 总的...
  • 全局变量、局部变量、堆、栈一.C语言中堆、栈全局变量的地址分配二.stm32的堆、栈、全局变量的地址分配三.参考博客 一.C语言中堆、栈全局变量的地址分配 通过以下代码来进行理解C语言中各中变量的概念: #include &...
  • STM8变量的存储

    2016-04-29 16:26:37
    a).bsct - 在zero page 区域的初始化变量 b).ubsct - 在zero page 里面的未初始化变量 c).bit -位操作段 d).share @near - Zero page 以外的RAM区域 a).bss - 未初始化变量区域 b).data - 已

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,632
精华内容 2,652
关键字:

stm8定义全局变量