发新帖我要提问
12
返回列表
打印

二维数组的操作,遇到点问题,请指教

[复制链接]
楼主: sfesdm
手机看帖
扫描二维码
随时随地手机跟帖
21
爱曦| | 2012-12-16 17:00 | 只看该作者 回帖奖励 |倒序浏览
笑看楼下~-~

使用特权

评论回复
22
sfesdm|  楼主 | 2012-12-16 20:03 | 只看该作者
我的串口发送程序如下:
u8  *TxdPointer  = NULL;
u16 TxdCount    = 0;
u16 TxdMax       = 0;

void SendMessage(u8 *P,u16 max)
{
    USART_SendData(USART1,P[0]);
    TxdCount   = 1;
    TxdMax     = max;
    TxdPointer = P;          
}


void USART1_IRQHandler(void)  //串口1中断服务程序
{
    if(USART_GetITStatus(USART1, USART_IT_TC) != RESET)
    {
        if(TxdCount < TxdMax)
        {
            USART_SendData(USART1,TxdPointer[TxdCount]);
            TxdCount++;   
        }
        else
        {
            USART_ClearFlag(USART1,USART_FLAG_TC);
        }                                                                               
    }                                                                               
}
我观察到的结果是,发完第一组数据后,就不再发送后面的了(比如"0xaa 0x55 addr 0x3a 0xa5 0x5a:返回时间\r\n"有40个字节数据,我开了50个字节的空间存放没一组数据,实际的发送结果是\n后面再有几个0,这也说明并不是换行符搞的鬼),不知道这是什么原因了。因为我认为,c语言是不检查数组是否越界的,而我只是想越过第一组数据发送后面的,并没有真的越过数组。

使用特权

评论回复
23
ming321| | 2012-12-17 09:09 | 只看该作者
刚刚做了一个显示屏 是要把上位机发来的数据在通过串口发回去 是你的2维数组用错了你想全部返回就是用把里面每一组数据都要刷一遍 你用一维数组套个for 就行了 2维数组也不抽象

使用特权

评论回复
24
john_lee| | 2012-12-17 09:26 | 只看该作者
本帖最后由 john_lee 于 2012-12-17 09:29 编辑

调用void SendMessage(u8 *P,u16 max)函数时的实参是什么?

使用特权

评论回复
25
sfesdm|  楼主 | 2012-12-17 12:40 | 只看该作者
具体调用是SendMessage(HelpTab[0],357);HelpTab是我在一楼的那个二维数组

使用特权

评论回复
26
mohanwei| | 2012-12-17 12:57 | 只看该作者
#define CMD_NUM 7
int i;
u8 HelpTab[CMD_NUM][50] = {
                                  {"0xaa 0x55 addr 0x3a 0xa5 0x5a:返回时间\r\n"        },
                                  {"0xaa 0x55 addr 0x3b 0xa5 0x5a:返回地点\r\n"        },
                                  {"0xaa 0x55 addr 0x3c0xa5 0x5a:返回人物\r\n"        },
                                  {"0xaa 0x55 addr 0x3d0xa5 0x5a:返回返回姓名\r\n" },
                                 {"0xaa 0x55 addr 0x3e0xa5 0x5a:返回返回性别\r\n"  },
                                 {"0xaa 0x55 addr 0x3f 0xa5 0x5a:返回返回事件\r\n"  },   
                                 {"help:返回帮助信息\r\n"                                               }      
                               };

for(i=0;i<CMD_NUM;i++)
{
     printf("%s",HelpTab[i]);
}

使用特权

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

本版积分规则