标题: 新手求教c语言问题 这个字符存到数组的语句,不应该使用for循环吗 [打印本页]

作者: reking8    时间: 2023-6-17 01:03
标题: 新手求教c语言问题 这个字符存到数组的语句,不应该使用for循环吗
请问这个字符存到数组的语句,不应该使用for循环吗?代码是从上到下执行,只有这么一句,不是只能存入一个字符吗?这段代码是中断程序中接收GPS发送的数据。求大神指点,

IMG_20230616_115707.png (80.12 KB, 下载次数: 50)

IMG_20230616_115707.png

作者: xuyaqi    时间: 2023-6-17 06:17
串口硬件收到一个字节,发出一个中断执行这段程序,字节存入rev_buf数组,数组标号+1,程序转入主程序,中断一次存一个,不用for。
作者: wufa1986    时间: 2023-6-17 08:19
先理解中断是啥概念,别一上来就看程序
作者: qsssuv    时间: 2023-6-17 09:24
看来楼主对底层不了解。每接收一个字节数据,中断都触发一次,因此,当你意识到这个串口无法一次性识别一帧数据的时候,应该差不多明白了,需要用一个变量自加建立索引,来存储每个字节数据。
作者: chxelc    时间: 2023-6-17 11:56
软硬结合,两手都要抓,要手都要硬,就能更好理解代码了。
作者: 13205495918    时间: 2023-6-17 15:39
这是属于单片机自身的问题了和C语言关系不大
作者: Hephaestus    时间: 2023-6-17 16:03
字符串不定长,以\n作为结束标志,你又不知道具体长度怎么循环???
作者: wulin    时间: 2023-6-17 16:18
/*************************************/
void Uart_Receive() interrupt 4
{
        static uchar ch=0;                //静态计数变量
        RI=0;                                        //接收中断请求标志位清0
        rev_buf[ch]=SBUF;                //接收到的数据串保存在缓存数组
        if(rec_buf[0]=='$')                //验证数据头,如果错误,被后续数据覆盖
        {
                ch++;
                if(rec_buf[ch-1]=='\n')//结束
                {
                        flag=1;                        //接收完成标志置1
                        ch=0;                        //计数变量清0
                }
        }
}
作者: kk17328    时间: 2023-6-17 19:01
每接收一个字节,都会产生中断,只不过是在底层处理了。都是有协议处理的




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1