¿Por qué me sale un dígito cuando calculo el espacio desde dos direcciones?

2

La hoja de datos del microcontrolador STM32F407 indica que mi región de flash se encuentra entre las siguientes direcciones:

0x08000000 to 0x080FFFFF

Quiero calcular la cantidad de flash, lo que sé es de 1024 KB, pero cuando intento demostrarlo, siempre llego a 1023. Aquí están mis cálculos:

0x080FFFFF - 0x08000000 = 0x000FFFFF
                        = 1048575
                        = (1048575 / 1024)KB
                        = 1023KB

Inversamente ...

1024 * 1024 = 1048576

¿Por qué estoy confundido con 1 byte? Pregunta tonta, y sé que esto es cosa de la escuela secundaria ...

    

2 respuestas

5

En primer lugar, está hablando de la región FLASH, pero luego de la RAM. Estas son dos cosas diferentes. Segundo: ¿Cuántos números pueden ser numerados por 0 a 9 ? 10 , ¿verdad? Así que está dado por 9 - 0 + 1 . Lo mismo con su cálculo de espacio. El tamaño total es
0x080FFFFF - 0x08000000 + 1 = 0x100000 = 1048576 . Entonces 1048576 / 1024 = 1024 .

    
respondido por el Eugene Sh.
2

Estás tomando la diferencia de la última dirección menos la primera. Esto le da la compensación de la primera a la última, no el total. Esto siempre estará apagado por 1.

Piense en contar a las personas que están de pie en una línea asignándoles a cada uno un número secuencial que comienza en 1. En el caso obvio y limitante en el que tiene dos personas, son los números 1 y 2. 2-1 le dice cuántas personas están distantes # 2 es de # 1, que siempre es uno menos que el número total de personas en la línea si aplica esto de primero a último.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas