查看: 11595|回复: 17

[求助] keil5 下这样定义全局变量有问题吗?

[复制链接]
  • TA的每日心情
    慵懒
    2016-11-24 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
    发表于 2015-4-28 17:21:33 | 显示全部楼层 |阅读模式
    头文件中:

    #ifdef KINETIS_GLOBAL
    #define KINETIS_EXTERN
    #else
    #define KINETIS_EXTERN extern
    #endif


    KINETIS_EXTERN uint8_t Kinetis_IntNesting;


    __STATIC_INLINE void disable_interrupt(void)
    {
    if(Kinetis_IntNesting == 0)
      __disable_irq();
    Kinetis_IntNesting++;
    }
    __STATIC_INLINE void enable_interrupt(void)
    {
    if(Kinetis_IntNesting > 0)
      Kinetis_IntNesting--;
    if(Kinetis_IntNesting == 0)
      __enable_irq();
    }

    在所有C文件中只有一个C文件定义了 KINETIS_EXTERN

    为什么引用这个头文件的其他C文件报错呢?错误是说没有定义 Kinetis_IntNesting 变量。
    通过宏我不是已经extern了吗?


    我知道答案 目前已有17人回答
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-24 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
     楼主| 发表于 2015-4-28 17:22:19 | 显示全部楼层
    把这两个内联函数还成宏封装也不行
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-9-17 19:57
  • 签到天数: 2310 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    107

    主题

    4270

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    10481
    最后登录
    2023-9-17
    发表于 2015-4-28 20:30:45 | 显示全部楼层
    你看最开始的宏定义,根据KINETIS_GLOBAL决定KINETIS_EXTERN 是空或者extern。如果是空,那么

    KINETIS_EXTERN uint8_t Kinetis_IntNesting;

    就是uint8_t Kinetis_IntNesting;
    否则是extern uint8_t Kinetis_IntNesting;

    如果是extern uint8_t Kinetis_IntNesting;那么Kinetis_IntNesting就需要在另外的地方被定义才行。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-3 11:19
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    50

    主题

    1万

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    14090
    最后登录
    2024-4-19
    发表于 2015-4-28 20:35:53 | 显示全部楼层
    没有定义 KINETIS_GLOBAL
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-11-9 09:28
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    9

    主题

    351

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1459
    最后登录
    1970-1-1
    发表于 2015-4-28 21:07:09 | 显示全部楼层
    第一,看是否定义了KINETIS_GLOBAL
    第二,再次确定工程中的某个C文件中有那个变量,一般情况下,如果工程某个文件定义了这个变量,用extern是可以访问的。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-24 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
     楼主| 发表于 2015-4-29 09:22:27 | 显示全部楼层
    shaoziyang 发表于 2015-4-28 20:30
    你看最开始的宏定义,根据KINETIS_GLOBAL决定KINETIS_EXTERN 是空或者extern。如果是空,那么

    KINETIS_EXT ...

    帖子已经说了,有且只有一个C文件定义了该宏,在该头文件对应的C文件里面。也就是说,变量Kinetis_IntNesting 已经定义了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-24 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
     楼主| 发表于 2015-4-29 09:23:02 | 显示全部楼层
    党国特派员 发表于 2015-4-28 20:35
    没有定义 KINETIS_GLOBAL

    帖子已经说了,有且只有一个C文件定义了该宏 KINETIS_GLOBAL,在该头文件对应的C文件里面。也就是说,变量Kinetis_IntNesting 已经定义了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-24 10:19
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    50

    主题

    1028

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    2870
    最后登录
    1970-1-1
     楼主| 发表于 2015-4-29 09:23:24 | 显示全部楼层
    Veiko 发表于 2015-4-28 21:07
    第一,看是否定义了KINETIS_GLOBAL
    第二,再次确定工程中的某个C文件中有那个变量,一般情况下,如果工程某 ...

    帖子已经说了,有且只有一个C文件定义了该宏 KINETIS_GLOBAL,在该头文件对应的C文件里面。也就是说,变量Kinetis_IntNesting 已经定义了
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    7

    主题

    107

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    444
    最后登录
    2019-3-7
    发表于 2015-4-29 09:43:59 | 显示全部楼层
    还是C++这方面做得好一些,C里面只能在一个文件定义,在另外一个文件extern了!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2015-4-29 09:44:32 | 显示全部楼层
    把.H和.C文件打包发上来。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-21 04:08 , Processed in 0.110916 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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