weixin_44845667 2021-04-25 13:47 采纳率: 0%
浏览 25

SWD离线烧写器问题

有无大佬可以指导一下以下代码的含义和流程吗

 

{
                    delay_ms(100);
                    OLED_ShowString(45,1,"          ",1,0);
                    OLED_ShowString(45,2,"          ",1,0);
                    while(!FLASH_SWD("write.bin")) 
                    {       
                        u8 WaitTips[] = "...";
                        OLED_ShowString(45,1,"          ",1,0);
                        OLED_ShowString(45,2,"WAIT",1,1);
                        for(i=0;i<3;i++){
                        OLED_ShowChar(69+i*6,2,WaitTips[i],1);  //在指定位置显示一个字符
                        delay_ms(200);
                    }
                        OLED_ShowString(45,2,"       ",1,1);
                    }
                                f_unlink("0:/write.bin");    /* 删除现有文件或目录 */
                      OLED_ShowString(98,2,"BACK",1,1);
                      select = 0;
                      while(1)
                      {
                          if(Scan_Key() == 1){
                              select ++;
                              if(select == 1) {
                                  OLED_ShowString(98,2,"    ",1,1);
                                  OLED_ShowString(98,2,"BACK",0,1);
                              }
                              else{
                                  OLED_ShowString(98,2,"    ",1,1);
                                  OLED_ShowString(98,2,"BACK",1,1);
                              }
                               if(select == 2) select = 0;
                          }
                          if(Scan_Key() == 2){
                              if(select == 1) break;
                          }
                      }
                      OLED_Clear();
                    OLED_DrawBMP(0,0,33,33,FlashLogo);
                              if(f_opendir(&DirInfo,(const TCHAR*)"0:") == FR_OK)/* 打开文件夹目录成功,目录信息已经在dir结构体中保存 */
                {
                  if(f_readdir(&DirInfo, &FileInfo) == FR_OK)  /* 读文件信息到文件状态结构体中 */
                  {
                             f_readdir(&DirInfo, &FileInfo);
                             OLED_ShowString(45,1,FileInfo.fname,1,1);
                        }
                  }        
                  OLED_ShowString(45,-1,"SELECT HEX",1,0);
                  OLED_ShowString(45,0,"----------",1,0);
                  OLED_ShowString(110,1,">>",1,1);
                  OLED_ShowString(92,2,"FLASH",1,1);
                  select = 0;
                  }
                      }
                    }

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-07-14 21:46
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    这段代码是一段嵌入式设备的程序,实现了在OLED显示屏上显示一系列信息,并通过按键操作进行选择。具体流程如下:
    1. 首先使用delay_ms(100)函数延时100ms,然后在OLED屏幕上显示两行空白字符串。
    2. 进入一个while循环,条件是当FLASH_SWD("write.bin")函数返回false时(可能是写入bin文件到芯片的操作),执行以下操作:
      • 在OLED屏幕上显示WAIT字样,并显示三个点循环旋转动画。
      • 删除已有的文件或目录"0:/write.bin"。
      • 在屏幕底部显示BACK字样。
    3. 进入一个无限循环,其中通过Scan_Key()函数判断按下的按键:
      • 如果按下的是1号按键,select加1,当select等于1时,在屏幕底部显示BACK,否则显示空白。
      • 如果按下的是2号按键且select等于1,则跳出循环。
    4. 在显示屏上显示一个logo,然后打开0:目录,并读取该目录下的文件信息,将文件名显示在屏幕上。
    5. 在屏幕上显示"SELECT HEX"和"FLASH"的字样,并显示一个字符" >" 用于指示选择操作。 尽管我们无法运行或编译这个代码,但以下是一种可能的代码示例,供参考:
    #define SELECT_PIN_1 1
    #define SELECT_PIN_2 2
    void showWaitAnimation() {
        char WaitTips[] = "...";
        OLED_ShowString(45, 1, "         ", 1, 0);
        OLED_ShowString(45, 2, "WAIT", 1, 1);
        for(int i = 0; i < 3; i++){
            OLED_ShowChar(69 + i * 6, 2, WaitTips[i], 1);
            delay_ms(200);
        }
        OLED_ShowString(45, 2, "     ", 1, 1);
    }
    int main() {
        select = 0;
        
        while(1){
            if(Scan_Key() == SELECT_PIN_1){
                select++;
                if (select == 1) {
                    OLED_ShowString(98, 2, "   ", 1, 1);
                    OLED_ShowString(98, 2, "BACK", 0, 1);
                } else {
                    OLED_ShowString(98, 2, "   ", 1, 1);
                    OLED_ShowString(98, 2, "BACK", 1, 1);
                }
                
                if(select == 2) {
                    select = 0;
                }
            }
            
            if(Scan_Key() == SELECT_PIN_2){
                if (select == 1) {
                    break;
                }
            }
        }
        
        OLED_Clear();
        OLED_DrawBMP(0, 0, 33, 33, FlashLogo);
        
        // 这里可以添加与文件操作相关的代码
        
        OLED_ShowString(45, -1, "SELECT HEX", 1, 0);
        OLED_ShowString(45, 0, "----------", 1, 0);
        OLED_ShowString(110, 1, ">>", 1, 1);
        OLED_ShowString(92, 2, "FLASH", 1, 1);
        
        select = 0;
    }
    

    请注意,由于缺少上下文和具体硬件设备的支持,这只是对可能的代码的猜测。如果需要进一步指导,请向硬件开发专家寻求帮助。

    评论

报告相同问题?

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格