AI8051U、STM32F103C8T6、AT32F421C8T7 浮点数计算能力测试
<h1>测试平台介绍</h1><ul>
<li>STM32F103C8T6是嘉立创地阔星最小系统板</li>
<li>AT32F421C8T7最小系统板(自制)</li>
<li>AI8051U最小系统板(自制)</li>
</ul>
<p><img src="data/attachment/forum/202504/26/131807mgyohauti1z09u1t.jpg" alt="微信图片_20250426131452.jpg" title="微信图片_20250426131452.jpg" /></p>
<h1>测试代码介绍</h1>
<ul>
<li>
<pre><code>int i;
float a = 3.1415926f, b = 2.71828f, c = 0.0f;
float temp;
float result;
for(int i = 0; i < 1000; i++) {
c = a + b;
c = a - b;
c = a * b;
c = a / b;
temp += c;
}
for(int i = 0; i < 1000; i++) {
c = sqrt(a);
c = sin(a);
c = exp(b);
c = a*b + c/b;
result += c;
}
</code></pre>
<h2>测试方案</h2>
<ul>
<li>使用PWM输入捕获上升沿和下降沿,测一个IO高点电平的宽度。得到计算时间,在需要计算的部分,令一个IO为高电平,计算结束之后,使这个IO为低电平。使用PWM输入捕获这个引脚的电平,在定时器中断内部输出计数值。定时器分频之后的计数频率为1Mhz即可。比如STM32定时器的定时器输入频率为72Mhz,那么就需要定时器分频系数为71,AT32的定时器输入频率为120Mhz,那么就需要分频系数为119,AI8051U同理。</li>
<li>编译器编译优化关闭,都为-O0</li>
</ul>
</li>
</ul>
<p><img src="data/attachment/forum/202504/26/132423pc7ibckbc1kd6b1k.png" alt="image.png" title="image.png" /></p>
<p><img src="data/attachment/forum/202504/26/132448fgggrzlkghqatlf3.png" alt="image.png" title="image.png" /></p>
<p><img src="data/attachment/forum/202504/26/132506ljoyw8zvdvdowjqk.png" alt="image.png" title="image.png" /></p>
<pre><code>//假设P14为普通IO,P20为输入捕获IO
P14 = 1;//这里会进入PWM通道1的上升沿中断
/*
计算部分
*/
P14=0;//这里会进入PWM通道2的下降沿中断,用下降沿中断时的值,减去上升沿时的值。即可得到运算时间。
</code></pre>
<h2>测试结果</h2>
<hr />
<table>
<thead>
<tr>
<th>单片机</th>
<th>运行时长</th>
<th>排名</th>
</tr>
</thead>
<tbody>
<tr>
<td>AI8051U</td>
<td>86736us=0.086736s</td>
<td>1</td>
</tr>
<tr>
<td>AT32F421C8T7</td>
<td>179568us=0.179568s</td>
<td>2</td>
</tr>
<tr>
<td>STM32F103C8T6</td>
<td>310956us=0.310956s</td>
<td>3</td>
</tr>
</tbody>
</table>
<h1>结果分析</h1>
<ul>
<li>
<p>由于AI8051U使用了FPU计算单元,在其主频只有40Mhz的情况下,计算能力很突出。</p>
</li>
<li>
<p>AT32F421C8T7由于其120Mhz的主频,所以计算速度也比较快。</p>
</li>
<li>
<p>stm32F103C8T6其主频72Mhz,但是没有硬件的浮点数计算单元,所以其计算速度较慢。</p>
</li>
<li>
<p>总结</p>
<ul>
<li>
<p>可以使用stm32f103c8t6的项目,只要硬件外设满足需求,AI8051U完全可以对STM32F103C8T6进行替代, RMB2.3元,全新原厂正品,而且手册也是中文手册,也有类似于cubemx的AiCube开发环境,对于学习过stm32的同学,切换方便。</p>
<h1>问题</h1>
<ul>
<li>AI8051U在开启PWM输入捕获时,用手触摸外部引脚不会导致定时器误入中断,抗干扰能力比较强(我是这么认为的)。</li>
<li>但是STM32F103C8T6,AT32F421C8T7用手触摸对应的输入捕获引脚,会一直误入中断。</li>
</ul>
</li>
</ul>
<p><a href="forum.php?mod=attachment&aid=95338" title="attachment"><img src="/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg" alt="upload" /> 附件:test_pwm_cap.zip</a> <a href="forum.php?mod=attachment&aid=95318" title="attachment"><img src="/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg" alt="upload" /> 附件:AT32F421C8T7_TEST_FPU.zip</a><a href="forum.php?mod=attachment&aid=95321" title="attachment"><img src="/source/plugin/zhanmishu_markdown/template/editor/images/upload.svg" alt="upload" /> 附件:pwm_input_capture.zip</a></p>
</li>
</ul>
<h1>附件说明</h1>
<ul>
<li>test_pwm_cap是AI8051U的工程代码</li>
<li>AT32F421C8T7_TEST_FPU AT32F421的代码</li>
<li>pwm_input_capture是STM32F103C8T6的代码</li>
</ul>
之前的AI8051U的PWM输入捕获程序有点问题,没有对溢出中断进行处理,所以计数值是不准确的,修改后的程序我已经上传了。最新的结果我也修正了一下。 AI8051U,
CPU跑40MHz,
TFPU 可以跑 120MHz,
PWM 可以跑 120MHz
神农鼎 发表于 2025-4-26 16:50
AI8051U,
CPU跑40MHz,
TFPU 可以跑 120MHz,
手册上说 FPU 最多只能跑 108 MHz,楼主跑的 120 MHz 真没问题嘛?? 给我你的心好吗 发表于 2025-4-28 14:50
手册上说 FPU 最多只能跑 108 MHz,楼主跑的 120 MHz 真没问题嘛??
没问题,108只是比较保守的一个速度,实际上跑120完全可以
页:
[1]