while(1) { for(i=1;i<41;i++) { switch(clearsavemes_flag[i]) { case CLEARALL: { ondata.num[i] = 0; outdata.getnum[i] = 0; if(clear_all == 0) { mx_sflah_erase_all(); clear_all = 1; mx_sflsh_write_data(0x00,&data,1); } } break; case CLEAR_ONLINE: { for(k=0;k<PER_SECTOR;k++) { mx_sflsh_erase(ADDR_ONLINE_MAC(i)+k*4096); } mx_sflsh_write_data(0x00,&data,1); ondata.num[i] = 0; }break; case CLEAR_OUTLINE: { for(k=0;k<PER_SECTOR;k++) { mx_sflsh_erase(ADDR_OUTLINE_MAC(i)+k*4096); } outdata.getnum[i] = 0; }break; } } for(i=1;i<41;i++) { if(clearsavemes_flag[i] == CLEAR_ONLINE || clearsavemes_flag[i] == CLEARALL || clearsavemes_flag[i] == CLEAR_OUTLINE) { if(clearsavemes_flag[i] == CLEAR_ONLINE ) { mx_sflsh_erase(ON_SAVE_NUM()); for(j=1;j<41;j++) { addrsave = ON_SAVE_NUM()+ j*2; num1 = ondata.num[j]>>8; num2 = (char)(ondata.num[j]); mx_sflsh_write_data(addrsave-1,&num1,1);//高8位 mx_sflsh_write_data(addrsave,&num2,1); } clearsavemes_flag[i] = CLEAR_SAVE_NO; } else if(clearsavemes_flag[i] == CLEAR_OUTLINE) { mx_sflsh_erase(OUT_SAVE_NUM()); for(j=1;j<41;j++) { addrsave = OUT_SAVE_NUM()+ j*2; num1 = outdata.getnum[j]>>8; num2 = (char)(outdata.getnum[j]); mx_sflsh_write_data(addrsave-1,&num1,1);//高8位 mx_sflsh_write_data(addrsave,&num2,1); } clearsavemes_flag[i] = CLEAR_SAVE_NO; } else { mx_sflsh_erase(ON_SAVE_NUM()); mx_sflsh_erase(OUT_SAVE_NUM()); clearsavemes_flag[i] = CLEAR_SAVE_NO; break; } } } vTaskDelay(100); }优化代码
时间: 2024-04-07 15:27:57 浏览: 104
以下是对代码的优化建议:
1. 在循环中使用延时函数会让程序变得不稳定,建议使用定时器来代替延时函数。
2. 可以将循环中的多层switch语句简化,提取出公共的部分,减少代码重复。
3. 在写入数据时,可以一次性写入多个数据,减少写入操作的次数。
4. 在循环中使用break语句时,要注意跳出的是哪个循环,不要跳出了外层循环。
5. 在写入数据时,可以使用DMA等硬件加速手段,提高效率。
6. 可以考虑使用更高效的算法来代替现有的算法,例如快速排序、哈希表等。
7. 可以使用编译器提供的优化选项,如-O2、-O3等,来提高代码执行效率。
8. 对于一些长时间执行的操作,可以将其放在单独的任务中,以提高程序的响应速度。
9. 在程序调试时,可以使用调试工具来帮助定位问题,如GDB调试器、printf语句等。
希望以上建议能对您有所帮助。
阅读全文