增加轮速输出

This commit is contained in:
2025-11-07 10:31:57 +08:00
parent 84221794b6
commit 2f580d0d3a
11 changed files with 121 additions and 98 deletions

View File

@@ -1,7 +1,7 @@
/*
* eth_drive.c
*
* Created on: 2023<32><33>1<EFBFBD><31>5<EFBFBD><35>
* Created on: 2023<32><33>1<EFBFBD><31>5<EFBFBD><35>
* Author: Administrator
*/
@@ -18,7 +18,7 @@ static RingBuffer nmea_rx_buf;
#define DMA_BUF_SIZE 1400
uint8_t dma_rx_buffer[DMA_BUF_SIZE] __attribute__((aligned(4)));
//__attribute__((aligned(4))) uint8_t dma_buffer[2048]; // GCC<43>
//__attribute__((aligned(4))) uint8_t dma_buffer[2048]; // GCC<43>
//void USART2_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));
@@ -48,7 +48,7 @@ void USART3_IRQHandler(void)
{
imu_buffer1.buf_len = IMU_LEN - DMA_GetCurrDataCounter(IMU_RX_CH);
if( (imu_buffer1.dma_buffer[imu_buffer1.active_buf][0] == IMU_IIM46234_HEADER1) && //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if( (imu_buffer1.dma_buffer[imu_buffer1.active_buf][0] == IMU_IIM46234_HEADER1) && //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
(imu_buffer1.dma_buffer[imu_buffer1.active_buf][1] == IMU_IIM46234_HEADER2) )
{
imu_buffer1.type = IIM46234;
@@ -105,7 +105,7 @@ void UART8_IRQHandler(void)
{
uint8_t UART_temp = 0;
UART_temp = USART_ReceiveData(UART8);
// printf("USART8:%d\n", UART_temp); // <20><><EFBFBD><EFBFBD>
// printf("USART8:%d\n", UART_temp); // <20><><EFBFBD><EFBFBD>
}
exit_critical_section(0);
}
@@ -131,7 +131,7 @@ void UART7_IRQHandler(void)
DMA_Cmd(UM982_RX_CH, DISABLE);
uint16_t received_len = DMA_BUF_SIZE - DMA_GetCurrDataCounter(UM982_RX_CH);
// 3. <20><><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>
// 3. <20><><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>
for(uint16_t i = 0; i < received_len; i++)
{
uint16_t next_head = (nmea_rx_buf.head + 1) % RING_BUF_SIZE;
@@ -166,7 +166,7 @@ void DMA1_Channel3_IRQHandler(void)
enter_critical_section();
imu_buffer1.buf_len = RX_BUFFER_LEN;
DMA_ClearITPendingBit(DMA1_IT_TC3);//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
DMA_ClearITPendingBit(DMA1_IT_TC3);//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
exit_critical_section(0);
}
@@ -184,7 +184,7 @@ void DMA2_Channel3_IRQHandler(void)
enter_critical_section();
RTCM_Buffer1.buf_len = RX_BUFFER_LEN;
DMA_ClearITPendingBit(DMA2_IT_TC3);//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
DMA_ClearITPendingBit(DMA2_IT_TC3);//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
exit_critical_section(0);
}
@@ -198,7 +198,7 @@ void DMA2_Channel3_IRQHandler(void)
void DMA2_Channel9_IRQHandler(void)
{
enter_critical_section();
DMA_ClearITPendingBit(DMA2_IT_TC9);//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
DMA_ClearITPendingBit(DMA2_IT_TC9);//<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
exit_critical_section(0);
}
@@ -242,7 +242,7 @@ void dmaInit(void)
DMA_Cmd(RTCM_RX_CH, ENABLE);
USART_DMACmd(RTCM_UART, USART_DMAReq_Rx, ENABLE);
//IMU DMA<4D><41><EFBFBD><EFBFBD>
//IMU DMA<4D><41><EFBFBD><EFBFBD>
DMA_DeInit(IMU_RX_CH);
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
@@ -270,7 +270,7 @@ void dmaInit(void)
USART_DMACmd(IMU_UART, USART_DMAReq_Rx, ENABLE);
//982 DMA<4D><41><EFBFBD><EFBFBD>
//982 DMA<4D><41><EFBFBD><EFBFBD>
DMA_DeInit(UM982_RX_CH);
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
@@ -363,7 +363,7 @@ void initUart(void)
NVIC_Init(&NVIC_InitStructure);
USART_Cmd(UART4, ENABLE);
/* UART6 TX-->C.0 RX-->C.1 */ //<2F>ӵ<EFBFBD>982<38><32>com1
/* UART6 TX-->C.0 RX-->C.1 */ //<2F>ӵ<EFBFBD>982<38><32>com1
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
@@ -389,7 +389,7 @@ void initUart(void)
NVIC_Init(&NVIC_InitStructure);
USART_Cmd(UART6, ENABLE);
/* UART7 TX-->C.2 RX-->C.3 *///<2F>ӵ<EFBFBD>982<38><32>com2
/* UART7 TX-->C.2 RX-->C.3 *///<2F>ӵ<EFBFBD>982<38><32>com2
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
@@ -443,7 +443,7 @@ void initUart(void)
void uartSendto(USART_TypeDef *USARTx, uint8_t * ucData, uint16_t len)//<2F><><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
void uartSendto(USART_TypeDef *USARTx, uint8_t * ucData, uint16_t len)//<2F><><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD>
{
for(uint16_t i = 0; i<len; i++)
{
@@ -457,9 +457,9 @@ void uartSendto(USART_TypeDef *USARTx, uint8_t * ucData, uint16_t len)//
void rtcmProcess(void *signal_id)
{
(void)signal_id; // <20><><EFBFBD>DZ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
(void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uartSendto(UART6, (uint8_t *)&(RTCM_Buffer1.dma_buffer[RTCM_Buffer1.active_buf^1][0]), RTCM_Buffer1.buf_len);//ֱ<>ӷ<EFBFBD><D3B7>ͷǼ<CDB7><C7BC><EFBFBD><EFBFBD>ڴ<EFBFBD>
uartSendto(UART6, (uint8_t *)&(RTCM_Buffer1.dma_buffer[RTCM_Buffer1.active_buf^1][0]), RTCM_Buffer1.buf_len);//ֱ<>ӷ<EFBFBD><D3B7>ͷǼ<CDB7><C7BC><EFBFBD><EFBFBD>ڴ<EFBFBD>
printf("rtcm forwarding\n");
}
@@ -468,25 +468,25 @@ void rtcmProcess(void *signal_id)
void setDataProcess(void *signal_id)
{
(void)signal_id; // <20><><EFBFBD>DZ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
(void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uartSendto(USART3, set_output_data, 20);
}
void setRateProcess(void *signal_id)
{
(void)signal_id; // <20><><EFBFBD>DZ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
(void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uartSendto(USART3, set_rate, 20);
}
void setSaveProcess(void *signal_id)
{
(void)signal_id; // <20><><EFBFBD>DZ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
(void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uartSendto(USART3, save_cmd, 20);
}
void setSteamProcess(void *signal_id)
{
(void)signal_id; // <20><><EFBFBD>DZ<EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>ʹ<EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
(void)signal_id; // <20><>DZ<EFBFBD><C7B1><EFBFBD>Ϊ<EFBFBD><CEAA>ʹ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
uartSendto(USART3, stream_cmd, 20);
}
@@ -494,18 +494,18 @@ void setSteamProcess(void *signal_id)
/* /?**?
* @brief <20><><EFBFBD><EFBFBD>NMEA<45><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>XOR<EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>
* @param nmea_str <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NMEA<45><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>$<24><>*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2>CRLF<4C><46>
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>0x00~0xFF<46><46>
* @brief <20><><EFBFBD><EFBFBD>NMEA<45><41><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>ͣ<EFBFBD>XOR<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>
* @param nmea_str <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NMEA<45><41><EFBFBD><E4A3A8><EFBFBD><EFBFBD>$<24><>*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2>CRLF<4C><46>
* @return <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<CEBB><D0A3>ͣ<EFBFBD>0x00~0xFF<46><46>
*/
uint8_t nmea_checksum(const char *nmea_str)
{
uint8_t checksum = 0;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>'$'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>'$'<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD>
if (*nmea_str == '$') nmea_str++;
// <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'*'<27><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'*'<27><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
while (*nmea_str && *nmea_str != '*') {
checksum ^= (uint8_t)*nmea_str++;
}
@@ -514,24 +514,24 @@ uint8_t nmea_checksum(const char *nmea_str)
/*
* @brief <20><>֤NMEA<45><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param nmea_str <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NMEA<45><41><EFBFBD><EFBFBD><EFBFBD>"$GPGGA,...*2A\r\n"<22><>
* @return У<><D0A3><EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD>ʧ<EFBFBD>ܷ<EFBFBD><EFBFBD><EFBFBD>0
* @brief <20><>֤NMEA<45><41><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD>
* @param nmea_str <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>NMEA<45><41><EFBFBD><E4A3A8>"$GPGGA,...*2A\r\n"<22><>
* @return У<><D0A3>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>ʧ<EFBFBD>ܷ<EFBFBD><DCB7><EFBFBD>0
*/
bool nmea_validate_checksum(const char *nmea_str)
{
const char *p = nmea_str;
uint8_t computed_cs, received_cs;
// <20><><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ<EFBFBD><EFBFBD>'*'
// <20><><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>ʼλ<CABC><CEBB>'*'
while (*p && *p != '*') p++;
if (*p != '*') return 0; // <20><>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD>
if (*p != '*') return 0; // <20><>У<EFBFBD><D0A3><EFBFBD><EFBFBD>ֶ<EFBFBD>
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>У<EFBFBD><D0A3><EFBFBD>ͣ<EFBFBD>2λʮ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>յ<EFBFBD><D5B5><EFBFBD>У<EFBFBD><D0A3>ͣ<EFBFBD>2λʮ<CEBB><CAAE><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>
if (!isxdigit(p[1]) || !isxdigit(p[2])) return 0;
received_cs = (uint8_t)strtol(p+1, NULL, 16);
// <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>У<EFBFBD><D0A3><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>У<EFBFBD><D0A3><EFBFBD>
computed_cs = nmea_checksum(nmea_str);
return (computed_cs == received_cs);
@@ -544,81 +544,81 @@ void ProcessNMEAFrames(void *signal_id)
bool frame_complete = false;
static uint8_t debug1s_cnt = 0;
debug1s_cnt ++;
if(debug1s_cnt >= 20)
{
debug1s_cnt = 0;
printf("nmea_buf tail:%d head:%d\n",
nmea_rx_buf.tail, nmea_rx_buf.head);
}
// debug1s_cnt ++;
// if(debug1s_cnt >= 20)
// {
// debug1s_cnt = 0;
// printf("nmea_buf tail:%d head:%d\n",
// nmea_rx_buf.tail, nmea_rx_buf.head);
// }
while(nmea_rx_buf.tail != nmea_rx_buf.head && !frame_complete)
{ // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>һ֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
{ // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǿ<EFBFBD><C7BF><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>һ֡<D2BB><D6A1><EFBFBD><EFBFBD>
uint8_t ch = nmea_rx_buf.buffer[nmea_rx_buf.tail];
nmea_rx_buf.tail = (nmea_rx_buf.tail + 1) % RING_BUF_SIZE;
if(nmea_rx_buf.overflow) {
nmea_rx_buf.tail = nmea_rx_buf.head;
// 3. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
// 3. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
nmea_rx_buf.overflow = 0;
// 4. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ط<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 4. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>̣<EFBFBD><CCA3><EFBFBD><EFBFBD>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
printf("Overflow recovery\n");
}
// ֡ͷ<D6A1><CDB7><EFBFBD><EFBFBD>
// ֡ͷ<D6A1><CDB7><EFBFBD>
if(ch == '$') {
if(parse_idx > 0 && parsing_buf[parse_idx-1] == '\n')
{
if (nmea_validate_checksum((char *)parsing_buf)) //У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (nmea_validate_checksum((char *)parsing_buf)) //У<><D0A3><EFBFBD><EFBFBD><EFBFBD>
{
memcpy(&nema_output1.buffer[0],parsing_buf,parse_idx);
publishMessage(&nema_output1, 1);
frame_complete = true; // <20><><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
frame_complete = true; // <20><><EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else
{
printf("nmea crc error");
frame_complete = true; // <20><><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
frame_complete = true; // <20><><EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
}
parse_idx = 0;
}
// <20><EFBFBD><E6B4A2><EFBFBD><EFBFBD>
// <20><EFBFBD><E6B4A2><EFBFBD><EFBFBD>
if(parse_idx < RING_BUF_SIZE-1 && !frame_complete)
{
parsing_buf[parse_idx++] = ch;
// ֡β<D6A1><CEB2><EFBFBD><EFBFBD>
// ֡β<D6A1><CEB2><EFBFBD>
if(parse_idx >= 2 &&
parsing_buf[parse_idx-2] == '\r' &&
parsing_buf[parse_idx-1] == '\n')
{
if (nmea_validate_checksum((char *)parsing_buf)) //У<><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (nmea_validate_checksum((char *)parsing_buf)) //У<><D0A3><EFBFBD><EFBFBD><EFBFBD>
{
memcpy(&nema_output1.buffer[0],parsing_buf,parse_idx);
publishMessage(&nema_output1, 1);
frame_complete = true; // <20><><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
frame_complete = true; // <20><><EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
else
{
printf("nmea buf error");
frame_complete = true; // <20><><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
frame_complete = true; // <20><><EFBFBD>֡<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
parse_idx = 0;
}
}
else if(!frame_complete)
{
parse_idx = 0; // <20><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
parse_idx = 0; // <20><>ֹ<EFBFBD><D6B9><EFBFBD>
}
}
timerStart(&nmea_timer, 50, 1); // 100ms<6D><73><EFBFBD>ٴδ<D9B4><CEB4><EFBFBD>
timerStart(&nmea_timer, 10, 1); // 100ms<6D><73><EFBFBD>ٴδ<D9B4><CEB4><EFBFBD>
}
void navigationRs232Process(void *signal_id)
@@ -630,7 +630,7 @@ void navigationRs232Process(void *signal_id)
// APPģ<50><C4A3><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><EFBFBD>
// APPģ<50><C4A3>ij<EFBFBD>ʼ<EFBFBD><CABC>
void interfaceUartInit(void)
{
subscribe(&set_output_data, setDataProcess);
@@ -641,7 +641,7 @@ void interfaceUartInit(void)
subscribe(&nmea_timer, ProcessNMEAFrames);
subscribe(&navigation_rs232_output, navigationRs232Process);
timerStart(&nmea_timer, 50,1);//50ms
timerStart(&nmea_timer, 10,1);//50ms
printf("interface uart: initial OK %d\n",getCurrentTime());
}