strpos 函数

/*string pos*/
char *StrPos(char * s1, uint32_t len1, char * s2, uint32_t len2)
{ 
	int32_t i = 0,j = 0;
	
	if ((len2 > len1) || (len1 == 0) || (len2 == 0))
	{
		return NULL;
	}
	
	for (i = 0; i < (len1 - len2 + 1); i++)
	{
		if (s1[i] != s2[0])
		{
		   continue ;
		}
		
		for (j = 1; j < len2; j++)
		{
			 if (s1[i + j] != s2[j])
			 {
				 break ;
			 }
		}
		
		if (j == len2)
		{		  
			return &s1[i];
		}	  
	}  
    return NULL;
}
static void comm_jinko_process(jinko_comm_t *p_protocol)
{
    uint16_t i, iend ;
    distance_pack_t* 	p_distance_pack;
    uint16_t len = 0;
    uint8_t sum_value, sum_check;
    char        *pStart =   NULL, *pEnd = NULL;
	char        *p2     =   NULL;	
	uint16_t distance;	
	uint16_t capture_count;
	uint16_t angle;	
	static uint32_t count;
	
    i = 0;
    iend = 0;

	pStart = StrPos((char *)&p_protocol->recv_buf[0], p_protocol->recv_size, "31..06+",strlen("31..06+"));
	
	if (pStart == NULL)
	{
		iend = p_protocol->recv_size - strlen("31..06+");
        p_protocol->recv_size = p_protocol->recv_size - iend;
        memcpy(p_protocol->recv_buf, &p_protocol->recv_buf[iend], p_protocol->recv_size);		
		return;
	}
	
	if ((p_protocol->recv_size - (pStart - (char *)&p_protocol->recv_buf[0])) < strlen("31..06+") + 9)
	{
		return;
	}
		
	pEnd = StrPos(pStart, p_protocol->recv_size - (pStart - (char *)&p_protocol->recv_buf[0]), " ",strlen(" "));
	
	if (pEnd == NULL)
	{
		iend = (pStart - (char *)&p_protocol->recv_buf[0]) + strlen("31..06+");
        p_protocol->recv_size = p_protocol->recv_size - iend;
        memcpy(p_protocol->recv_buf, &p_protocol->recv_buf[iend], p_protocol->recv_size);		
		return;
	}
	
	p2 = strtok((pStart), "+");	
    p2 = (char *)strtok(NULL, "+");
	p2 = (char *)strtok(p2, " ");
	
	distance = atoi(p2);
	
	capture_count =__HAL_TIM_GET_COUNTER(&TIM_EncoderHandle);	
	angle = ((capture_count * 1.0) / 35000) * 360 * 100;			


	send_angle_distance(distance / 100, angle);	
	

	count++;
	if (count >= 10)
	{
		count = 0;
		DEBUG_OUT("comm_jinko_process: distance...%d\r\n", distance);	
		DEBUG_OUT("comm_jinko_process: capture_count...%d\r\n", capture_count);	
		DEBUG_OUT("comm_jinko_process: gAngle...%d.%d .\r\n", angle / 100, angle % 100);	
		DEBUG_OUT("\r\n\r\n");			
	}	
	

	
	iend = pEnd - (char *)&p_protocol->recv_buf[0];
	p_protocol->recv_size = p_protocol->recv_size - iend;
	memcpy(p_protocol->recv_buf, &p_protocol->recv_buf[iend], p_protocol->recv_size);		
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值