[已解决] app designer中fprintf输出两次的疑问

[复制链接]
sunismyself 发表于 7 天前
  1. function Button_upDatePushed(app, event)
  2.             app.protocol_step = 1;
  3.             app.protocol_DataStep = 1;
  4.             app.protocol_SendStep = 1;
  5.             app.protocol_FileDataAllPage = 0;
  6.             app.protocol_FileDataFinalPageSize = 0;
  7.             app.binData = 1;
  8.             %每次发送2K数据

  9.             %取余
  10.             app.protocol_FileDataFinalPageSize = mod(size(app.binData),2048);
  11.             fprintf('我进来了几次????');
  12.             if(size(app.binData) > 0)
  13.                 fprintf('文件有效,内容不为空');
  14.                 fprintf('文件总字节数:%d\n',size(app.binData));
  15.                 if(app.protocol_FileDataFinalPageSize == 0)
  16.                     app.protocol_FileDataAllPage = size(app.binData) / 2048;
  17.                     app.protocol_FileDataFinalPageSize = 2048;
  18.                 else
  19.                     app.protocol_FileDataAllPage = (size(app.binData) - app.protocol_FileDataFinalPageSize) / 2048 + 1;
  20.                 end
  21.                 %testData = app.protocol_FileDataAllPage;
  22.                 %fprintf('文件页数:%d\n',app.protocol_FileDataAllPage);
  23.                 %testData = app.protocol_FileDataAllPage;
  24.                 %fprintf('最后一页字节数:%d\n',app.protocol_FileDataFinalPageSize);
  25.             end
  26.             
  27.             fprintf('ssss');
  28. %             disp(app.protocol_FileDataAllPage);
  29. %             disp(app.protocol_FileDataFinalPageSize);
  30. %             disp(app.protocol_SendStep);
  31.             fprintf('文件页数:%d\n',app.protocol_FileDataAllPage);
  32.             fprintf('最后一页字节数:%d\n',app.protocol_FileDataFinalPageSize);
  33.             fprintf('协议步骤:%d\n',app.protocol_step);
  34.             fprintf('gfdsgsdff');
  35.             %开始升级,首先打开串口
  36.             %释放串口资源
  37.             delete(instrfindall);
  38.             %创建串口资源
  39.             app.Com_Obj = serial('COM3','BaudRate',115200);
  40.             %设置串口中断
  41.             set(app.Com_Obj,'BytesAvailableFcnMode','byte');
  42.             set(app.Com_Obj,'BytesAvailableFcnCount',1);
  43.             set(app.Com_Obj,'BytesAvailableFcn',@app.my_callback1);
  44.             set(app.Com_Obj,'OutputBufferSize',3000);
  45.             %查询串口是否已经打开
  46.             if(app.Com_Obj.Status == 'closed')
  47.                 %打开串口
  48.                 fopen(app.Com_Obj);
  49.                 if(app.Com_Obj.Status == 'open')
  50.                     fprintf(1 , '串口打开成功\n');
  51.                 else
  52.                     fprintf(1 , '串口打开失败\n');
  53.                 end
  54.             else
  55.                 fprintf(1 , '串口被占用\n');
  56.             end
  57.             
  58.             %开启定时器任务
  59.             app.timer_one = timer('TimerFcn',@t_TimerFcn, 'Period', 10.0);
  60.             app.timer_one.TimerFcn = @(~, ~) timer_callback(app);
  61.             app.timer_one.StartDelay = 0;
  62.             app.timer_one.Period = 0.1;
  63.             app.timer_one.ExecutionMode = 'fixedSpacing';
  64.             start(app.timer_one);

  65.         end
  66.     end
复制代码
代码如上图所示,app.protocol_FileDataFinalPageSize这个全局变量,进了按钮回调之后,我给了初值,然后再根据逻辑得到一个值,然后用fprintf输出,结果发现输出两次结果,很是不解,下面是输出的信息


我进来了几次????文件有效,内容不为空文件总字节数:1
文件总字节数:1
ssss文件页数:1
文件页数:1
最后一页字节数:1
最后一页字节数:1
协议步骤:1



协议步骤:1


最佳答案


1119093102 发表于 7 天前
本帖最后由 1119093102 于 2022-11-23 14:45 编辑
sunismyself 发表于 2022-11-23 13:29
就是第33行代码
fprintf('最后一页字节数:%d\n',app.protocol_FileDataFinalPageSize);
我只执行了这一次 ...

我建议你使用disp出来它,看看是不是命令行也这样子,如果是可能是代码哪里有问题,我试了一下,变量是一个矩阵或者向量是也会出现你这种情况

5 条回复


1119093102 发表于 7 天前
没看明白

sunismyself 发表于 7 天前

就是第33行代码
fprintf('最后一页字节数:%d\n',app.protocol_FileDataFinalPageSize);
我只执行了这一次,但是打印结果又两次
最后一页字节数:1
最后一页字节数:1

开水窝瓜 发表于 7 天前
sunismyself 发表于 2022-11-23 13:29
就是第33行代码
fprintf('最后一页字节数:%d\n',app.protocol_FileDataFinalPageSize);
我只执行了这一次 ...

你可以考虑将这部分函数独立出来,另写一个脚本来确定是否是这个函数的错问题

因为看这段函数表面上并不会发生打印两次的情况,如果确定了不是这段函数的问题,可以考虑看看别的函数有没有输出,触发方式会不会导致重复执行,运行的函数是否是最新修改好的

1119093102 发表于 7 天前
本帖最后由 1119093102 于 2022-11-23 14:45 编辑
sunismyself 发表于 2022-11-23 13:29
就是第33行代码
fprintf('最后一页字节数:%d\n',app.protocol_FileDataFinalPageSize);
我只执行了这一次 ...

我建议你使用disp出来它,看看是不是命令行也这样子,如果是可能是代码哪里有问题,我试了一下,变量是一个矩阵或者向量是也会出现你这种情况
回复此楼

sunismyself 发表于 7 天前
1119093102 发表于 2022-11-23 14:40
我建议你使用disp出来它,看看是不是命令行也这样子,如果是可能是代码哪里有问题,我试了一下,变量是一 ...

谢谢,找到原因了,在于SIZE(),我想得到向量大小,SIZE返回的是[M N],需要用M * N,或者用length()....
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表