你是写的C代码然后二进制编译下载了运行么? 还是python/lua之类脚本? 后者就别考虑一秒多少次了.
现代单片机, 笼统地说, 大部分都是单周期指令的, 51也会号称自己是"1T 8051", 虽然还是有不少需要4-6个周期的指令. AVR和ARM之类RISC指令集里大部分简单指令是单周期的, 如图:
STM8虽然是CISC, 靠流水线也基本实现了单周期, 如图:
有的是8位, 有的是32位, 有的是RISC, 有的是CISC, 怎么比较? 所以80年代有人开发了dhrystone测试程序, 当时DEC公司的VAX计算机主频是1MHz, 每秒能执行1757次dhrystone, 于是把每秒1757次dhrystone定义为1DMIPS. dhrystone基本只考察整数运算性能.
常用的单片机里, 51基本是0.1DMIPS/MHz以下(包括牛皮吹上天的STC), STM8约0.33DMIPS/MHz, AVR约0.5DMIPS/MHz, 乘以主频, 24M的STC51有2DMIPS, 16M的STM8有5DMIPS, 同样16M的AVR有8DMIPS. 和x86 PC相比, 大约是介于286和386之间.
STM32F10x标称1.25DMIPS/MHz, 然而却没有说72MHz主频时能跑到90DMIPS, 为什么? 因为它的FLASH在高频时需要插入等待周期, 性能会稍有下降. 实测72MHz时性能是65DMIPS左右, 大约是高端486到低端Pentium的水平.
STM32F40x加了cache, 解决了这个问题, 因此官方标称168MHz时性能就是168*1.25=210DMIPS, 接近Pentium MMX.
ESP8266实测80MHz时89DMIPS, 大约1.1DMIPS/MHz. 和STM32差不多. ESP32我没测, 如果和ESP8266相同水平, 在240MHz时应该至少有270DMIPS左右.
国产的GD32F350和GD32FFPR标称频率分别是108MHz和168MHz, 实际上都能超频到280MHz左右. 这俩因为把flash完整镜像到ram里运行, 不存在flash等待周期导致性能下降的问题, 因此超频后的性能达到了320DMIPS左右, 相当于当年的中期K6和赛扬300A之类.
GD32VF103则是换成了RISCV内核, 标称1.5DMIPS/MHz, 然而我和几个朋友实测的结果都达到了2DMIPS/MHz左右. 这东西能超频到192MHz, 总性能达到了382DMIPS.
双发射的STM32H750每个周期执行两条指令, 标称2.14DMIPS/MHz, 480M主频, 乘起来是1027DMIPS(官方数据, 非实测.), 已经和Pentium3差不多了.
我手里实测过几十款MCU, 详细数据见github链接:
x86 CPU的dhrystone数据见链接:
反对一下240MHz就是2.4亿条的回答。
经历过AMD推土机时代的人都知道处理器性能不能只看频率,有一个叫做IPC的东西(每个时钟周期能执行的指令数),而如果处理器是240MHz就是一秒2.4亿时钟周期,为了对比不同主频和IPC的CPU性能,又有一个叫做MIPS(Million Instructions Per Second)的性能指标(每秒平均可执行的单字节长定点指令数)这就是你想问的东西了。但是很多情况下厂商不会公布处理器的MIPS指标,不过似乎还是能找到esp32的mips的是600MIPS。
另外值得注意的是,在同一架构下,每条指令的执行时间并不是等长的。指令也不是一条执行完才开始执行下一条的,由于处理器流水线的存在可以更好的利用CPU资源:将一条指令的执行过程分为几个子部分,这样流水线上就可以同时存在多条不同执行阶段指令。有些指令比较简单,比如只是单纯的对通用寄存器赋值而不需要读写内存,就会省去流水线上的很多步骤使得执行得会更快,而对于需要内存读写的指令则会慢一些。
你所说的执行速度明显不正常的变化和CPU本身关系应该不大,大概率是io操作导致的,单片机的io主要是通过读写内存映射寄存器来完成的,这种读写行为很可能是占用执行时间的主要原因。