Red de conocimiento informático - Problemas con los teléfonos móviles - Comparación entre stm32f407 y tms320f28335

Comparación entre stm32f407 y tms320f28335

Comparación vista en el foro.

Acabo de recibir la placa de evaluación STM32F4. El punto de venta de STM32F4 esta vez es el conjunto de instrucciones FPU y DSP. He estado prestándole atención durante mucho tiempo. el rendimiento de punto flotante de STM32F4 si cumple con Simplemente actualice su arquitectura de control de vuelo. Originalmente, se usaba la arquitectura de doble núcleo STM32F103 + 28335 y el F28335 se usaba como procesador de punto flotante. Era problemático depurar, por lo que siempre quise cambiarlo.

El código de prueba utiliza el algoritmo de mi control de vuelo, todos usando operaciones de punto flotante, incluidos dos filtros Kalman de séptimo y noveno orden para actitud y posición, incluida una gran cantidad de operaciones matriciales y algo de navegación. algoritmos y controladores PID, etc., y algunos IF y SWITCH contienen declaraciones de juicio de salto, que es una operación más completa en comparación con los algoritmos puros.

Entorno de prueba:

F28335: CCS V3.3, usando biblioteca matemática optimizada de TI, sin optimización, el programa se ejecuta en RAM.

STM32F4: KEIL V4.7, utilizando la biblioteca matemática optimizada de ARM, sin optimización.

Método de prueba:

F28335: Establezca un punto de interrupción en la entrada del algoritmo de control de vuelo, borre el contador de CPU CCS (perfil->reloj), luego PASE y registre la CPU. count

STM32F4: establece un punto de interrupción en la entrada del algoritmo de control de vuelo, registra el contador de estados en la ventana de registro, luego PASA, registra el nuevo valor del contador y réstalo del valor anterior para obtener el recuento de CPU

Resultados de la prueba:

F28335: 253359 ciclos de CPU, divididos por 150 MHZ, son aproximadamente 1,69 ms

STM32F4: 285964 ciclos, divididos por 168 MHZ, Es aproximadamente 1,7 ms, un poco más lento que F28335.

La conclusión es que para algoritmos completos de punto flotante que contienen relativamente muchos saltos, STM32F4 no parece ser mucho más lento.

Deje de lado los factores arquitectónicos y mírelo desde la perspectiva de operaciones puras de punto flotante. Las instrucciones de suma, resta y multiplicación FPU VADD.F32, VSUB.F32 y VMUL.F32 de STM32F4 son todas instrucciones de un solo ciclo, mientras que la división VDIV.F32 requiere 14 ciclos.

Por ejemplo: a = a / b; el ensamblado generado es:

0x08000220 ED900A00 VLDR s0,[r0,#0x00]

0x08000224 4804 LDR r0 , [pc,#16] ; @0x08000238

0x08000226 EDD00A00 VLDR s1,[r0,#0x00]

0x0800022A EE801A20 VDIV.F32 s2,s0,s1

0x0800022E 4803 LDR r0,[pc,#12] ; @0x0800023C

0x08000230 ED801A00 VSTR s2,[r0,#0x00]

Copiar código F28335: La FPU de F28335 tiene Las instrucciones de multiplicación de suma y resta son todas de doble ciclo. Dado que no hay instrucciones de división de hardware, F28335 utiliza software para simular la división de punto flotante. Puede ver las palabras LCR $div_f32.asm en el ensamblaje, que requiere 19 ciclos de reloj.

Por ejemplo: a = a * b, el ensamblaje resultante es:

0087B2 E203 MOV32 *-SP[4], R0H

0087B4 E2AF MOV32 R1H , *-SP[6], UNCF

0087B6 E700 MPYF32 R0H, R1H, R0H

0087B8 7700 NOP //La canalización debe esperar a que se complete la operación FPU, por lo que NOP es requerido

0087B9 E203 MOV32 *-SP[4], R0H

División de código de copia:

0087BD E203 MOV32 *-SP[4], R0H

0087BF E2AF MOV32 R1H, *-SP[6], UNCF

0087C1 7640 LCR $div_f32.asm:52:71$

0087C3 E203 MOV32 *- SP[4], R0H

Conclusión del código de copia:

Se puede ver que solo desde la perspectiva del procesador de punto flotante, F28335 no es tan bueno como la FPU de F4. Sin embargo, dado que F28335 es una arquitectura de Harvard y tiene una tubería larga, puede completar la lectura, el cálculo y el almacenamiento en un ciclo de reloj. Por lo tanto, si el programa se ejecuta continuamente, será mucho más rápido que ARM, por ejemplo, ejecutando a = a. + b solo una vez. Se necesitan 5 ciclos de reloj, pero la desventaja es que una vez que quieras saltar, debes borrar la tubería. Si es for(i = 0;i < 1000; i ++. )

a = a + b;

La velocidad de operaciones como copiar código es más lenta que la de ARM (probado como 17 ciclos por ciclo, ARM es 14). esta es la diferencia entre ARM y DSP.

Al observar esta comparación de prueba, siento que todavía hay ciertos problemas con el entorno:

1. F28335 se ejecuta en RAM y ambos realizan operaciones en el entorno del emulador. Es más confiable ejecutarlo sin conexión en Flash.

2. Una de las dos plataformas de compilación es CCS y la otra es KEIL. Es necesario discutir la optimización de declaraciones comunes.

3. Las bibliotecas matemáticas de ARM y TI admiten diferentes tipos de operaciones.