金牌会员
 
- 积分
- 1115
- 金钱
- 1115
- 注册时间
- 2016-8-1
- 在线时间
- 235 小时
|
1金钱
本帖最后由 rindy 于 2018-3-24 14:07 编辑
[mw_shl_code=c,true]void add_user_log(u8 *user_log_time,u8 *user_log_custom_cardnum,u8 user_log_action,u8 user_log_door_num)//添加用户刷卡操作记录
{
u16 i=0;
struct User_Operation_Log *p;//定义结构体指针
u16 j;
u8 uu[sizeof(user_operation_log)]={0};
printf("写进去之前user_log_current_num=%d\r\n",user_log_current_num);
STMFLASH_Write(Adress39,&user_log_current_num,1);//写入当前最近一条存储的序号 执行这条的时候就出现HardFault_Handler,不知道怎么回事,其他的地方用这句函数都没有问题,很奇怪
STMFLASH_Read(Adress39,&user_log_current_num,1);//读出当前最近一条存储的序号
printf("读出来user_log_current_num=%d\r\n",user_log_current_num);
//
strcpy(user_operation_log[user_log_current_num].user_log_time, user_log_time);
strcpy(user_operation_log[user_log_current_num].user_log_custom_cardnum, user_log_custom_cardnum);
user_operation_log[user_log_current_num].user_log_action=user_log_action;
user_operation_log[user_log_current_num].user_log_door_num=user_log_door_num;
user_log_current_num++;
if(user_log_current_num>Max_User_Log_Num)
user_log_current_num=1;
p=user_operation_log;//取得首地址
for(j=0;j<sizeof(user_operation_log);j++)
{
uu[j]=*(((u8*)p)+j);
}
STMFLASH_Write(0x8034000,(u16*)uu,sizeof(user_operation_log));
}[/mw_shl_code]
单片机型号是stm32f103vct6 flash256k
调用上面函数时候在执行到STMFLASH_Write(Adress39,&user_log_current_num,1);就出现HardFault_Handler,调用的是原子的flash函数,其他地方调用都正常的,这里不知道就出现这种情况,写入的只是一个简单的变量。有没有大神帮我解释一下,搞了一天了。
[img]file:///C:\Users\jblzky\AppData\Roaming\Tencent\Users\2292560110\QQ\WinTemp\RichOle\J0H`)8E_EOI]7M]1E3N%E@0.png[/img]
|
-
最佳答案
查看完整内容[请看2#楼]
我发现程序的核心原因是这个https://blog.csdn.net/l_w_zeng/article/details/73502095,现在我的程序就像文中所说,定义的结构体数据会不知所云的变化,完全不按照逻辑来,因为我在程序中定义了很多局部数组都是很大的,超过了系统的Stack_Size为栈的大小,默认为0x400,现在程序老是出现莫名其妙的问题,我已经奔溃了
现在我把定义大的局部变量全都去掉了,换成了一个全局变量大数组,问题都好了,真是找花了我三天时间啊
|