OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3589|回复: 3

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

[复制链接]

21

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2018-4-16
在线时间
14 小时
发表于 2018-5-15 08:53:39 | 显示全部楼层 |阅读模式
1金钱
主函数读取是0,但是回调函数已经给改了,并且每次自加都是从上次 的基础上,打印正常。我把主函数中的不正常的数据提出来封装成回调就可以了。但是有个串口文件中定义的标志位又出问题(main中原来是没问题的)。标志位初始化为0,串口中断置1,回调函数检测到1后清零(清完打印确实为0)。但是这个判断还是能进去,我尝试在串口中断里自加没影响,说明只进了一次串口中断。我在if上面打印标志位时发现正常了。后来发现是只要加了串口发送的程序(if判断上面和if里的第一条语句)就会变正常!!!!
bug太强大,只是太少!!求助大神们~~~~·~支援支援

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2018-5-15 09:41:49 | 显示全部楼层
回复

使用道具 举报

21

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2018-4-16
在线时间
14 小时
 楼主| 发表于 2018-5-15 12:44:58 | 显示全部楼层
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);
}
回复

使用道具 举报

21

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2018-4-16
在线时间
14 小时
 楼主| 发表于 2018-5-18 13:23:37 | 显示全部楼层
么个?木有人能解答一下码?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 04:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表