¿Se puede trasplantar el código C del microcontrolador STC a stm32?
Si cambias el chip o el circuito, definitivamente habrá que reescribir la capa inferior.
Sigue siendo muy importante tener buenos hábitos a la hora de escribir programas. Hablemos de hábitos de trasplante.
La forma más importante de mejorar la portabilidad es ocultar los detalles de la implementación del hardware y separar la lógica de la capa inferior.
Por ejemplo, si el LED parpadea y se enciende, P1_0=0 en 51, es cuestión de una frase. En esta oración, hay tres aspectos relacionados con el hardware: (1) En el hardware, P1.0 está conectado al LED (2) En el hardware, el nivel bajo está encendido y, en consecuencia, el nivel alto está apagado. El hardware utiliza 51. Se utilizan 51 operaciones de bits únicas.
Cambie el circuito o cambie el chip, todo lo cual debe reescribirse. Supongamos que hay diez lugares en el programa que deben iluminarse y diez lugares que deben cambiarse durante el trasplante. Defina el asunto de encender la luz como una función, llámelo método o llámelo operación. Los detalles de la operación específica están ocultos y solo se muestra una cosa: encender la luz. De esta manera, voidLED_ON(void); en el programa principal, o en el programa de capa de aplicación, llama a LED_ON() para encender la luz. A la aplicación no le importa cómo encender la luz y no puede controlarla. Se deja a un programa subyacente separado para hacerlo, es decir, el contenido de la función LED_ON se coloca en un archivo separado. Si usa 51, simplemente escriba una capa inferior debajo de 51. Si desea trasplantarlo, si desea usar CM3, simplemente escriba una capa inferior de CM3. No es necesario cambiar el programa principal, al menos tan poco como. posible.
Para mejorar la portabilidad, intente escribir código en C estándar, que implica los detalles de implementación de diferentes sistemas de compilación. También debe prestar atención a los detalles ocultos. Los detalles de hardware anteriores se consideran detalles de software.
Por ejemplo, sfr, sbit e interrupción son exclusivos de 51 y deben reescribirse si se cambian a un sistema diferente. El método de procesamiento es el mismo: ocultelo y colóquelo en un archivo subyacente separado.
Básicamente, al realizar estos dos pasos, la portabilidad del programa mejorará enormemente.
Tomemos otro pequeño ejemplo:
//app.c
#include "bsp.h"//Tenga cuidado de no incluir encabezados relacionados con el hardware aquí Los archivos, como "reg51.h", no deben incluirse aquí.
voidmain(void)
{
mientras(1)
{
if(hasKey() )
{
led_on();
retraso(100);
led_off();
}
}
//bsp.h
typedefunsignedshortuint16_t;
typedefbitbool;
voidled_on(void) ;
voidled_off(void);
voiddelay(uint16_tms);
boolhasKey(void);
//bsp_for_51.c
#include "bsp.h"
#include "reg51.h"
sbitled=P1^0;
#defineON( 0)
voidled_on(vacío)
{
led=ON;
}
voidled_off(vacío )
{
led=!ON;
}
voiddelay(uint16_tms)
{ p>
inti;
mientras(ms--)
for(i=0;i}
boolhasKey(void)
{
return(P0!=0xFF);//¿Probar si hay botones?
}
Este es un sistema 51, reemplácelo. con STM32, simplemente reescriba bsp.c, el sistema se puede trasplantar sin cambiar app.c