Algunos diseños de microcontroladores tienen limitaciones de memoria. En ese caso, hay un truco que te puede resultar útil.
Algunos diseños de microcontroladores tienen limitaciones de memoria. En ese caso, hay un truco que te puede resultar útil.
Recientemente, alguien me recordó una columna que escribí hace mucho tiempo. ASCII, EBCDIC, ISO y UnicodeComo parte de esto, el lector DMcCunney comentó: Entradas en EBCDIC La lista canónica de la jerga de los hackers que mantiene Eric Raymond es bastante interesante. Además, Bryan Innes dijo en un correo electrónico: La guía definitiva para la codificación ASCII Para comprender mejor los conceptos básicos de codificación de caracteres y ASCII. ”
La razón por la que me estoy rascando la cabeza con esto aquí es por algunos trucos ingeniosos usados por los diseñadores de antaño para eludir el hecho de que la memoria de la computadora es costosa y limitada. Además, la velocidad del reloj del procesador era baja y ahorré los ciclos de reloj desperdiciados.
Uno de esos ejemplos sucedió con el probador 2225 de GenRad. Usé esto para escribir un programa para probar la funcionalidad de la placa de circuito. Como parte de esto, quería generar mensajes de texto como “Póngase la sonda…” o “No presione el botón rojo grande”. El problema era que no teníamos que usar el conjunto completo ASCII de 128 códigos y caracteres que requieren 7 bits (generalmente almacenados en bytes de 8 bits). Por ejemplo, solo usé letras mayúsculas y números, y rara vez usé signos de puntuación o caracteres especiales.
Ya no recuerdo los detalles, pero recuerdo que era algo como esto. Primero, usé un subconjunto de caracteres. A los efectos de estas explicaciones, supondremos que el conjunto de caracteres consta de 40 elementos, como se muestra a continuación.
Como puede ver, están las letras de la A a la Z, los números del 0 al 9, el carácter de espacio (número 36), el punto (número 37) y los caracteres ‘+’ y ‘-‘.
Supongamos que estamos trabajando con palabras de memoria de 16 bits de ancho. ¿Cuál es la forma más eficiente de almacenar caracteres en términos de uso de memoria?
Dado que 2^6 = 64, la cantidad mínima de bits que pueden codificar 40 elementos diferentes es 6, lo que significa que solo estamos usando 40/64 = 62,5 % de los patrones disponibles. Esto significa que está desperdiciando el 37,5%.
En realidad, la situación es mucho peor que esto, porque una palabra de 16 bits solo puede almacenar dos caracteres de 6 bits. Entonces, en realidad está usando 8 bits para cada carácter. En otras palabras, se pueden usar 16 bits para representar 2^16 = 65 536 patrones diferentes, pero usar esos bits para almacenar 40 x 40 = 1600 patrones (2 caracteres) solamente. Entonces solo estás usando 1,600. / 65.536 = ~2,4 % de los patrones disponibles, lo que es, en el mejor de los casos, desastroso.
Ahora, antes de continuar, pensemos por un momento en esta pregunta: ¿Puedes pensar en una forma de almacenar más caracteres en un campo de 16 bits?
Una forma de pensar en esto es que estamos trabajando en un sistema radix-40 (o radix-40). Así como el sistema decimal de números decimales cuenta con 10 elementos y se representa mediante símbolos del 0 al 9, el sistema base 40 cuenta con 40 elementos y se numera del 0 al 39. aumentar.
Una solución es comenzar con un valor de cero. Luego agregue el valor del siguiente carácter que desea almacenar y multiplique el resultado por la base. Esto es más fácil de entender cuando ves lo que realmente está sucediendo. Supongamos que el mensaje que queremos codificar es la palabra de tres letras “HEY”. Los códigos H, E e Y son 7, 4 y 24 respectivamente. La secuencia de operaciones se parece a la siguiente figura.

Si desea obtener el carácter más tarde, utilice la siguiente secuencia de operaciones. donde ‘/’ representa una operación de división de enteros que descarta el resto, y ‘%’ representa una operación de resto de enteros cuyo resultado es el resto. Siguiendo las divisiones:

Como puede ver, usando esta técnica, ahora podemos almacenar tres caracteres en cada palabra de 16 bits. Esto equivale a 5,33r bits por carácter, mucho mejor que los 8 bits por carácter anteriores.
Otra forma de verlo es que ahora podemos almacenar 40 x 40 x 40 = 64 000 patrones diferentes en una palabra de 16 bits. Anteriormente era de hasta un 2,4 % de utilización).
En estos días, la memoria de la computadora tiende a ser increíblemente barata y ampliamente disponible. Entonces, en términos generales, este tipo de cosas solo tiene interés académico para muchos diseñadores. Dicho esto, su diseño puede tener limitaciones de memoria. El punto es que nunca se sabe cuándo este tipo de truco (técnica) (o variaciones del mismo) será útil.
Ahora, hay dos cosas que me gustaría preguntarte. Primero, perdí la pista del nombre del algoritmo de codificación utilizado por los probadores de GenRad. Tampoco puedo recordar los detalles de eso. esta tecnica.
El siguiente punto es que hay muchos trucos y técnicas como esta, pero muchas de ellas se han olvidado con el paso de los años y otras solo las conocemos nosotros, el viejo Fadi Daddy, por lo que si conoces alguna que creas que pueda ser de interés o útil para los jóvenes diseñadores, le agradecería que me enviara un correo electrónico a: [email protected]
. ¿Le gustaría escribir su propia columna para su publicación en EEWeb.com?