Un string esta formado por los caracteres mas un caracter nulo ( 0x00 )void lcd_send_string (char *str)
{
while (*str) lcd_send_data (*str++);
}
Esta funcione recibe un puntero, es decir a la indicador de donde se encuentra la primer letra de tu palabra... Ejemplo
Su pongamos que haces:
lcd_send_string ("Hola");
Y que "Hola" el compilador lo puso en la Flash, debido a que no cambia, y esta ubicado en la pocision 0x1000 de la FLASH, entonces en tu flash tendrias algo asi:
Direccion de memoria - Contenido
0x1000 - 'H'
0x1001 - 'o'
0x1002 - 'l'
0x1003 - 'a'
0x1004 - '\0'
Lo que vos le pasas a la funcion es el valor 0x1000. No todo el string, solo un indicado de donde esta alojado.
La funcion ahora si lcd_send_string realiza lo siguiente si lo escribo un poco mas claro:
while(*str)
{
lcd_send_data(*str);
str++;
}
Voy a hacer todos los pasos para que te des cuenta como es que funciona.
El while, pregunta que contenido hay en la direccion que da str... El unico caso que sea falso y salga del while es que el valor que apunta str sea 0x00, sino ejecuta el while. Dentro se envia envia la letra mediante lcd_send_data. Y finalmente se le dice que apunte a la direccion siguiente. Algo asi:
Primera vuelta (apenas entra)
str = 0x1000 -> *str = 'H'
Lo que esta dentro del while es distinto de 0, por lo tanto se considera como verdadero y ejecuta el while.
enviando la 'H' y incrementa str a 0x1001
Segunda vuelta:
str = 0x1001 -> *str = 'o'
Lo que esta dentro del while es distinto de 0, por lo tanto se considera como verdadero y ejecuta el while.
envia la 'o' y incrementa str a 0x1002
3ra:
str = 0x1002 -> *str = 'l'
Lo que esta dentro del while es distinto de 0, por lo tanto se considera como verdadero y ejecuta el while.
envia la 'l' y incrementa str a 0x1003
4ta:
str = 0x1003 -> *str = 'a'
Lo que esta dentro del while es distinto de 0, por lo tanto se considera como verdadero y ejecuta el while.
envia la 'a' y incrementa str a 0x1004
5ta:
str = 0x1004 -> *str = 0x00
El while se termina aca debido a que el contenido es 0.
Resumiendolo a todo lo que dije:
Envia caracter a caracter hasta encontrar un caracter nulo, donde sale del while.
Caracter nulo que el compilador C ya incorpora en una string y que es util justamente para determinar donde termina.