打印
[STM32F1]

为什么函数执行完了,还能导致系统死机?

[复制链接]
1179|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lqab1983|  楼主 | 2014-9-4 13:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F103VET6   库函数3.5

为了描述简便,前述这部分语法不对,就是为了说明意思。
我的设想是,有这么一个数组就3个字节那么大,数据内容不为空,有数。
u8 TXXX.recvaddr【3】 = {1,2,3};

然后从EEPROm里读取了一组数据,存入了u8 certify_userlist【16*3】 = {0};这个数组里。这个数组具体存入的元素个数根据变量certify_usernums来决定。
我想在certify_userlist里查找是否有TXXX.recvaddr【】这个数组的内容,3个字节一组一组的找,如果找到直接函数返回1.否则返回0.

也就是说 比如 想在 certify_userlist[48] = {4,5,6;7,8,9;1,2,3;10,11,12}里查找是否有TXXX.recvaddr[3] = {1,2,3}的值
该段函数如下:

u8 Authentication_list()
{
    u8 i,k;
    I2C_Read(I2C1, ADDR_24C02N, 48, &certify_usernums, 1);
    printf("Auther: %d\r\n", certify_usernums);
    if((certify_usernums <= 16)&&(certify_usernums >= 0))
    {
        I2C_Read(I2C1, ADDR_24C02N, 0, certify_userlist, certify_usernums * 3);
    }
    for(k = 0; k < certify_usernums *3 ;k++)
    {
        printf("certify_userlist[%d]: %d\r\n", k,certify_userlist[k]);
    }

    for(i = 0; i < certify_usernums; i++)
    {
        printf(" cer: %d\r\n",i);
        if(0 == memcmp(TXXX.recvaddr, certify_userlist + i*3, 3))
        {
            printf("OK\r\n");
            memset(certify_userlist, 0, 48);  
            iscertify = 1;
            return 1;
        }   
    }
    iscertify = 0;
    memset(certify_userlist, 0, 48);
    return 0;
}

我现在非常奇怪的是我这段程序,我通过看Log,基本确定它能够找到数据是否存在,而且也能执行到return;但为什么执行完,整个主程序就死机了。

大家帮我看看吧。谢谢了!!!!

沙发
mmuuss586| | 2014-9-4 19:40 | 只看该作者
确定是这段程序问题吗???
如果是这段程序问题,那只能慢慢查,可以从RETURN入手,将RETURN改用其它方式返回;

使用特权

评论回复
板凳
lqab1983|  楼主 | 2014-9-17 10:33 | 只看该作者
确定是这个程序问题  return 应该没问题

使用特权

评论回复
地板
diweo| | 2014-9-17 11:13 | 只看该作者
别用printf了,上调试器吧

使用特权

评论回复
5
想做大牛的小马| | 2014-9-17 11:19 | 只看该作者
。。。。。。你这个函数在什么位置被调用的呢?主循环里还是定时器里还是操作系统的任务里?
都return了还跑飞要查上下文,只贴这个对定位问题感觉意义不大

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

53

帖子

0

粉丝