帧头帧尾代码

本文介绍了一个使用C语言处理字符串的示例程序,该程序能够从输入的字符串中提取出以head开始的部分,并将其存储到另一个字符串变量中。通过遍历和条件判断,实现了对特定子串的定位和提取。

#include<stdio.h>
#include<string.h>
char head_tail(char str,char result){
int i = 0;
while(str != ‘h’){
str++;
}
if(str==‘h’&&(str+1)==‘e’&&
(str+2)==‘a’&&
(str+3)==‘d’){
while(
(str+i+3)!=’\0’){
(result+i)=(str+i+3);
i++;
printf("%d ",i); //循环多少次
}
}
}
int main(){
char str[100]={0};
char result[100]={0};
printf(“请输入一串字符:\n”);
gets(str);
printf(“头帧:head\n”);
printf(“尾帧:tail\n”);
head_tail(str,result);
printf(“取出的中间字符串=%s\n”,result);
return 0;
}

在上述代码的基础上,如果你想要添加的检查,你可以这样做。首先假设我们有一个固定的标识,例如`START_BYTE`表示,`END_BYTE`表示。以下是修改后的部分代码: ```c // 假设的字节 #define START_BYTE 0x5A #define END_BYTE 0x7D // 用于临时存储完整的数据 static uint8_t frame_buffer[FRAME_LENGTH]; // 修改接收函数 void USART_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_RXNE)) { // 检查是否接收到新的数据 uint8_t data = USART_ReceiveData(USART1); // 获取新数据 // 检查是否接收到 if (data == START_BYTE && !frame_buffer_sent) { frame_buffer[frame_head_index++] = data; // 开始保存数据 frame_head_index %= FRAME_LENGTH; // 保持索引在合法范围内 frame_buffer_sent = true; // 标记开始发送 } else if (data == END_BYTE && frame_buffer_sent) { // 接收到 insert_to_queue(&usartQueue, frame_buffer); // 将完整放入队列 frame_buffer_sent = false; // 清除发送标记 frame_head_index = 0; // 重置指针 } else if (frame_buffer_sent) { // 正在发送期间,继续保存数据 frame_buffer[frame_head_index++] = data; // 存储当前数据 } } } // 新增判断和处理数据的部分 void handle_received_frame(uint8_t* buffer, size_t length) { if (length > 0 && buffer[length - 1] == END_BYTE) { for (size_t i = 0; i < length - 1; i++) { handle_received_data(buffer[i]); // 处理内数据 } // 处理完整的数据 } else { // 接收到的不是一个完整的,忽略或丢弃 printf("Invalid frame detected.\n"); } } // 修改主循环,现在在处理数据之前先检查队列内的 while (1) { if (!is_empty(&usartQueue)) { uint8_t* frame = dequeue_from_queue(&usartQueue); handle_received_frame(frame, sizeof(frame)); // 解析并处理 free(frame); // 释放内存 } } ``` 在这个改动中,我们在接收函数中增加了的判断,并在接收到时调用`handle_received_frame`函数来处理完整。同时,在主循环中,处理队列数据前会先解析
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值