¿Cuál es el tamaño de las variables integrales en un controlador de 8 bits, un controlador de 16 bits y un controlador de 32 bits, y depende totalmente de la arquitectura MCU o la arquitectura del compilador?

Al preguntar específicamente por las variables integrales, espero que la intención sea preguntar por los números sin un punto decimal en ellos.

Generalmente usamos int datatype para lo mismo.

El lenguaje C en su especificación o reglas para C99 [1] especifica,

un valor mínimo para un objeto de tipo int para ser -32767 es decir – ((2 ^ 15) –1)

un valor máximo para un objeto de tipo unsigned int que sea 65535, es decir ((2 ^ 16) – 1)

Pero el manual de referencia de AVR Libc para el compilador -avr -gcc especifica [2],

firmado [3] / unsigned [4] int con al menos 8 bits.

Esta diferencia en la definición estándar de int con signo / sin signo se debe a que el estándar C99 es general y no específicamente para el mundo integrado.

Entonces, como lo veo, el compilador es el que define el tamaño mínimo para una variable entera basada en el procesador / controlador de destino.

Por lo tanto, el compilador puede ir con

  • al menos 8 bits para una variable entera en un microcontrolador de 8 bits
  • al menos 8/16 bits para una variable entera en un microcontrolador de 16 bits
  • al menos 8/16/32 bits para una variable entera en un microcontrolador de 32 bits

La razón por la que especifiqué una opción para 8/16 y 8/16/32 bits es porque algunos microcontroladores [5] [6] tienen registros de 8 bits en un bus de datos de 16 bits de ancho o permiten un acceso de ubicación de dirección de media palabra.

Entonces, para resumir:

La combinación de compilador + microprocesador / controlador decide si una variable int ocupa 1/2/4 Bytes de espacio de memoria.

Espero que esto aclare su consulta.

Notas al pie

[1] http://www.open-std.org/jtc1/sc2…

[2] Tipos enteros de ancho mínimo

[3] Manual de referencia de AVR Libc

[4] Manual de referencia de AVR Libc

[5] http://ww1.microchip.com/downloa…

[6] http://ww1.microchip.com/downloa…

El tamaño variable es independiente de la arquitectura MCU. Si la MCU es de 8 bits, eso no significa que pueda declarar solo variables de 8 bits. El significado real del controlador de n bits es que tienen un puerto de n bits, lo que significa que si tiene un controlador de 8 bits, su bus de datos sería de 8 bits y los controladores de 16 bits tienen 16 bits de bus de datos.

A pesar de tener un bus de datos de 8 bits, muchos microcontroladores de 8 bits pueden tener un bus de direcciones de 16 bits. Entonces, en general, lo que significan los controladores de n bits significa que tienen n bits de bus de datos.

Si está interesado en una respuesta detallada, siga los siguientes enlaces:

¿Qué tan diferentes son los microcontroladores de 8 bits de los microcontroladores de 32 bits cuando se trata de programarlos?

Espero que te ayude a entender.

Gracias.!!

El tamaño depende de la arquitectura del compilador y no de la arquitectura MCU.

Depende de tu compilador

More Interesting

Dado que la generación automática de código C o C ++ para sistemas integrados se ha generalizado y la codificación manual está mal vista en muchas partes de la industria automotriz, ¿podría un desarrollo similar afectar a otras partes de la industria y hacer que las habilidades de programación sean inútiles eventualmente?

¿Cuál es el propósito exacto de Booter en cualquier controlador integrado?

¿Por qué se desarrolló Verilog? ¿Puede C / C ++ hacer lo que hace Verilog?

¿Cómo se asocian estas direcciones base con estas estructuras en C incrustado?

Soy un programador integrado de 1 año de experiencia. ¿Es bueno trabajar en una startup con un contrato de 3 años en Embedded?

Quiero comenzar una carrera en sistemas integrados. ¿Donde debería empezar?

Sistemas integrados: ¿Por qué necesitamos un controlador IC (por ejemplo, TA7257P) para conducir un motor de CC?

Cómo comenzar a aprender uClinux o Linux incrustado

Realmente quiero entender el código Linux BSP (paquete de soporte de placa). ¿Dónde empiezo?

¿Cuál es la diferencia entre hacer un sistema embebido y simplemente programar periféricos básicos (temporizador, SPI, I2C, UART, etc.)?

¿Cuál es la diferencia entre periféricos y hardware en sistemas embebidos?

Entre i3indya y cetpa, ¿cuál es mejor para el entrenamiento de verano en sistemas integrados? ¿Hay algún instituto mejor que los dos?

Si quiero estar a la par con las necesidades futuras de programación en sistemas integrados, ¿qué idiomas debo aprender?

¿Cómo se crea un firmware?

¿Cuál es el siguiente paso para una persona que está interesada en los sistemas embebidos después de trabajar en placas ATmega, MSP430 o Arduino y construyó pocos proyectos de hardware decentes? ¿Qué hay de trabajar en Linux embebido?