主函数无法正常读写全局变量,回调函数可以.求助!!

2019-07-20 08:09发布

主函数读取是0,但是回调函数已经给改了,并且每次自加都是从上次 的基础上,打印正常。我把主函数中的不正常的数据提出来封装成回调就可以了。但是有个串口文件中定义的标志位又出问题(main中原来是没问题的)。标志位初始化为0,串口中断置1,回调函数检测到1后清零(清完打印确实为0)。但是这个判断还是能进去,我尝试在串口中断里自加没影响,说明只进了一次串口中断。我在if上面打印标志位时发现正常了。后来发现是只要加了串口发送的程序(if判断上面和if里的第一条语句)就会变正常!!!!
bug太强大,只是太少!!求助大神们~~~~·~支援支援
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
ianhom
1楼-- · 2019-07-20 08:28
贴代码把
YGD
2楼-- · 2019-07-20 13:37
typedef struct
{
        jpeg_image image_number[IMAGE_MAX_NUMBER];                 
        uint16_t image_amount;                                 
        uint16_t image_write_No;        
        volatile uint16_t image_read_No;                 
}valid_image_data;

volatile valid_image_data image; //声明

void usart_order_handle()
{
        if(Order_come_flag == 1)        //现在问题在这下面置0再返回会识别为1,串口发送读一下就不识别为1了。 (这部分代码放到main,image 结构体里的变量读取错,在回调函数和main中读的地址是一样的。但是主函数无法正常操作)        
        {
//若在这加上串口发送程序就会正常,在if上面是一样可以的。是读取发送的Order_come_flag <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
                        delay_ms(10000);            
                        if(aRxBuffer_usart3[0] == 'F')
                        {
//                                USART3->DR=aRxBuffer_usart3[0];  
//                                while((USART3->SR&0X40)==0);
//                                delay_ms(10);
//                                USART3->DR=image.image_read_No;  
//                                while((USART3->SR&0X40)==0);
                                if(image.image_read_No == 0)
                                        image.image_read_No = 2;
                                else image.image_read_No --;
                                delay_ms(10);
//                                USART3->DR=(uint8_t)image.image_read_No;  
//                                while((USART3->SR&0X40)==0);
                        }
//                        uint8_t point[4];
//                        sprintf(point,"%08x",&image.image_read_No);
//                        usart3_send_bytes(point,sizeof(point));
                        USART3->DR=(uint8_t)image.image_read_No;  
                        while((USART3->SR&0X40)==0);
                        
                        USART3->DR=(uint8_t)(image.image_read_No >> 8);  
                        while((USART3->SR&0X40)==0);
                        
                        delay_ms(5000);
                        
//                        flash_read_to_usart();
                        Order_come_flag = 0;  //现在置0,再回到上面读取会识别为1 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
                }        
}
///串口中程序
volatile uint8_t Order_come_flag = 0; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

void USART3_IRQHandler(void)
{
        u8 Res;
        if((__HAL_UART_GET_FLAG(&USART3_Handler,UART_FLAG_RXNE)!=RESET))  //&#189;óê&#213;&#214;D&#182;&#207;(&#189;óê&#213;μ&#189;μ&#196;êy&#190;Y±&#216;D&#235;ê&#199;0x0d 0x0a&#189;á&#206;2)
        {
                 HAL_UART_Receive(&USART3_Handler,&Res,1,1000);
//                 if(Res == 0x41)
                          aRxBuffer_usart3[0] = Res;
                         Order_come_flag = 1;      //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
        }
                HAL_UART_IRQHandler(&USART3_Handler);
                HAL_UART_Receive_IT(&USART3_Handler, (u8 *)aRxBuffer_usart3, 1);
}
YGD
3楼-- · 2019-07-20 17:51
 精彩回答 2  元偷偷看……

一周热门 更多>