uint8_t handle_pb620_receive(char *buffer)
{
? ? uint8_t return_byte=0;
? ? memset(buffer,0,USART_BUF_pb620);
? ? if(fifo_pb620.buffer[fifo_pb620.buf_count]!=0)
? ? {
? ? ? ? uint16_t i;
? ? ? ? fifo_pb620.clear = 0;
? ? ? ? i = fifo_pb620.buffer[fifo_pb620.buf_count];
? ? ? ? if(fifo_pb620.in < fifo_pb620.out)
? ? ? ? {
? ? ? ? ? ? for (uint16_t var = 0; var < fifo_pb620.buffer[fifo_pb620.buf_count]; ++var)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? buffer[var] = usart_struct_bufer_pb620.RX_Buffer[fifo_pb620.in + var];
? ? ? ? ? ? }
//? ? ? ? ? ? memcpy(&buffer[0],&(usart_struct_bufer_pb620.RX_Buffer[fifo_pb620.in]),fifo_pb620.buffer[fifo_pb620.buf_count]);
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? for (uint16_t var = 0; var < (USART_BUF_pb620 - fifo_pb620.in); ++var)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? buffer[var] = usart_struct_bufer_pb620.RX_Buffer[fifo_pb620.in + var];
? ? ? ? ? ? }
//? ? ? ? ? ? memcpy(&buffer[0],&(usart_struct_bufer_pb620.RX_Buffer[fifo_pb620.in]),USART_BUF_pb620 - fifo_pb620.in);
? ? ? ? ? ? for(uint16_t k=0;k
? ? ? ? ? ? {
? ? ? ? ? ? ? ? buffer[USART_BUF_pb620 - fifo_pb620.in + k] = usart_struct_bufer_pb620.RX_Buffer[k];
? ? ? ? ? ? }
? ? ? ? }
}
下面是map文件
?.bss.usart_struct_bufer_pb620
? ? ? ? ? ? ? ? 0x000000002000041c? ? ? 0x384 ./drive/usart/drive_usart_pb620.o
? ? ? ? ? ? ? ? 0x000000002000041c? ? ? ? ? ? ? ? usart_struct_bufer_pb620
?.bss.calendar? 0x00000000200007a0? ? ? ? 0xa ./drive/rtc/bsp_rtc.o
? ? ? ? ? ? ? ? 0x00000000200007a0? ? ? ? ? ? ? ? calendar
?*fill*? ? ? ? ?0x00000000200007aa? ? ? ? 0x2?
?.bss.pb620_check_auto_send_cmd
? ? ? ? ? ? ? ? 0x00000000200007ac? ? ? ?0x14 ./Application/app_usart/app_usart_pb620.o
? ? ? ? ? ? ? ? 0x00000000200007ac? ? ? ? ? ? ? ? pb620_check_auto_send_cmd
?.bss.struct_gas_offline_data
? ? ? ? ? ? ? ? 0x00000000200007c0? ? ? ?0x48 ./Application/app_usart/app_usart_pb620.o
? ? ? ? ? ? ? ? 0x00000000200007c0? ? ? ? ? ? ? ? struct_gas_offline_data
#define FIFO_len_pb620? ? ? ? ? ? ? 50? ? ? ? ? ? ? ? ? ? ? //FIFO緩存區(qū)存儲(chǔ)每次接收的數(shù)據(jù)長度
#define USART_BUF_pb620? ? ? ? ? ? ?300? ? ? ? ? ? ? ? ? ? ? //接收數(shù)據(jù)長度
typedef struct
{
? ? uint8_t? ? RX_Buffer[USART_BUF_pb620];? ? ? ? ? ? ? ? ? ? ?//接收數(shù)組
? ? uint8_t? ? TX_Buffer[USART_BUF_pb620];? ? ? ? ? ? ? ? ? ? ?//發(fā)送數(shù)組
? ? uint8_t? ? com[USART_BUF_pb620];? ? ? ? ? ? ? ? ? ? ? ? ? ?//用于處理數(shù)據(jù)
}USART_buffer_pb620;
USART_buffer_pb620? ?usart_struct_bufer_pb620;
handle_pb620_receive中的參數(shù)是usart_struct_bufer_pb620.com,在使用memcpy時(shí),每次拷貝的細(xì)節(jié)為41個(gè),程序運(yùn)行一段時(shí)間后,會(huì)導(dǎo)致后面定義的變量struct_gas_offline_data中的數(shù)據(jù)為memcpy拷貝的最后幾個(gè)字節(jié),該段程序在keil中使用時(shí)未出現(xiàn)問題。后來將memcpy更改為for循環(huán)拷貝,就沒有問題。懷疑指針的地址指錯(cuò)了。不知道是什么原因引起的。