OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4624|回复: 9

stm32f4与FreeRTOSS使用全局变量,出现硬件错误

[复制链接]

19

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
422
金钱
422
注册时间
2015-1-19
在线时间
99 小时
发表于 2019-6-17 15:02:33 | 显示全部楼层 |阅读模式
    stm32f4与FreeRTOSS使用全局变量,出现硬件错误,具体
typedef struct Timexx
{
        u8 second;
        u8 minute;
        u8 hour;
        u8 enable;
}Timex;  
extern Timex Time;


使用上面这个,一上电初始化没多久就硬件错误,而用下面这种写法,就正常,找不到原因,郁闷啊
extern u8 Time_second;
extern u8 Time_minute;
extern u8 Time_hour;
extern u8 Time_enable;

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

1906

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4100
金钱
4100
注册时间
2018-8-14
在线时间
695 小时
发表于 2019-6-17 15:57:13 | 显示全部楼层
我猜这是对齐的问题, 把你赋值的部分贴出来看看
回复 支持 反对

使用道具 举报

19

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
422
金钱
422
注册时间
2015-1-19
在线时间
99 小时
 楼主| 发表于 2019-6-17 16:01:34 | 显示全部楼层
edmund1234 发表于 2019-6-17 15:57
我猜这是对齐的问题, 把你赋值的部分贴出来看看

        if(TIM_GetITStatus(TIM5,TIM_IT_Update)==SET) //òç3öÖD¶Ï
        {
                if(Time_enable == 1)
                {
                        Time_second ++;
                        if(Time_second > 60)
                        {
                                Time_second = 0;
                                Time_second++;
                                if(Time_second > 60)
                                {
                                        Time_second = 0;
                                  Time_hour++;
                                        if(Time_hour > 60)
                                        {
                                                Time_hour = 0;
                                        }
                                }
                        }
                }
                else
                {
                        Time_minute = Time_second = Time_hour = 0;
                }
        }
        TIM_ClearITPendingBit(TIM5,TIM_IT_Update);  
就是在定时器里面计时而已,要怎么弄才能使用结构体了
回复 支持 反对

使用道具 举报

19

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
422
金钱
422
注册时间
2015-1-19
在线时间
99 小时
 楼主| 发表于 2019-6-17 16:06:33 | 显示全部楼层
我以前用F103和FreeRTOS都是类似这样写的
typedef struct Timexx
{
        u8 second;
        u8 minute;
        u8 hour;
        u8 enable;
}Timex;  
extern Timex Time;
程序从来没出过问题,最近用F4和FreeRTOS就是各种问题,老是硬件错误,无语,不是中断优先级问题,就是这种,搞死了,难道F4的限制比较多么
回复 支持 反对

使用道具 举报

3

主题

1906

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4100
金钱
4100
注册时间
2018-8-14
在线时间
695 小时
发表于 2019-6-17 16:12:02 | 显示全部楼层
用Keil的吧, 在Debug模式下,
void HardFault_Handler 函数里设个断点
停在断点后, View-> Call Stack + Locals,拍下“Call Stack + Locals”窗口, 贴上来
回复 支持 反对

使用道具 举报

19

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
422
金钱
422
注册时间
2015-1-19
在线时间
99 小时
 楼主| 发表于 2019-6-18 10:42:56 | 显示全部楼层
edmund1234 发表于 2019-6-17 16:12
用Keil的吧, 在Debug模式下,
void HardFault_Handler 函数里设个断点
停在断点后, View-> Call Stack ...

贴不了图片啊
回复 支持 反对

使用道具 举报

19

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
422
金钱
422
注册时间
2015-1-19
在线时间
99 小时
 楼主| 发表于 2019-6-18 10:43:54 | 显示全部楼层

显示的是定时器方面的错误
回复 支持 反对

使用道具 举报

19

主题

78

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
422
金钱
422
注册时间
2015-1-19
在线时间
99 小时
 楼主| 发表于 2019-7-1 11:44:31 | 显示全部楼层
悲催啊,试了很多次,只要一启动1ms定时器,就死机,任务里面的函数都取消掉了,在网上下了很多个别人OK的例程都是这个样子啊
回复 支持 反对

使用道具 举报

5

主题

63

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2018-6-15
在线时间
28 小时
发表于 2019-7-3 19:34:36 | 显示全部楼层
  1. typedef struct Timexx
  2. {
  3.         u8 second;
  4.         u8 minute;
  5.         u8 hour;
  6.         u8 enable;
  7. }Timex;
复制代码

这里是新定义一个类型,再使用
  1. extern Timex Time;
  2. 其他程序肯定是没有 Timex 的类型的
复制代码

回复 支持 反对

使用道具 举报

4

主题

44

帖子

0

精华

高级会员

Rank: 4

积分
635
金钱
635
注册时间
2019-4-23
在线时间
84 小时
发表于 2019-7-27 16:26:21 | 显示全部楼层
可能是全局变量,资源共享问题; 你直接用全局变量来传递数据导致问题的; 有试试用queue等来传递数据吗.
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 03:35

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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