Upgrades de Dynamic C Comentario técnico: CTC-017

Upgrades de Dynamic C Comentario técnico: CTC-017
CTC-017, Upgrades de Dynamic C
Comentario técnico: CTC-017
Título: Upgrades de Dynamic C
Autor: Sergio R. Caprile, Senior Engineer
Revisiones Fecha
Comentarios
0 10/03/04
Las nuevas versiones de Dynamic C suelen venir acompañadas de cambios en las bibliotecas de funciones
(libraries). Estos cambios pueden ser simplemente cosméticos (cambios en comentarios, puntuación,
legibilidad) o funcionales. Algunos de estos cambios funcionales, suelen incluir el hacer no bloqueante (nonblocking) una función que sí lo era. En este caso, el programa principal recibirá el control antes de lo previsto,
y a menos que se realicen modificaciones no funcionará.
Por consiguiente, al migrar a una versión más moderna del compilador (y esto debería en realidad hacerse
con cualquier compilador) se deberá chequear exhaustivamente el funcionamiento del código, leer correcta
y detenidamente las notas que trae (release notes), el encabezado de ayuda de la función que nos está
trayendo problemas, para realizar las modificaciones pertinentes, y fundamentalmente los ejemplos de uso en
el directorio “samples”.
Se cita a continuación un ejemplo, padecido por el autor al portar su demo destinada a un seminario, de la
versión 8.01, con la cual funcionaba perfectamente, a la versión 8.3:
Inicialización de la red usando DHCP en 8.01:
puts("Inicializando la red...");
if(sock_init()){
puts("No inicializa");
exit(1);
}
else {
inet_ntoa(IPaddress,gethostid());
printf("IP Address = %s",IPaddress);
}
Observando el ejemplo de uso de DHCP que viene en samples de DC8.3 se aprecia un comentario:
/*
* Actually initialize the network interfaces. This blocks for a short time (about 1s)
* to allow for Ethernet negotiation, but does not block to wait for DHCP to complete.
* The non-blocking behavior is new since DC8.04.
*/
sock_init();
Es decir, antes, al llamar a sock_init(), el sistema quedaba bloqueado hasta conseguir una IP o fallar en el
intento. Ahora, se devuelve el control y el usuario puede consultar el estado cuando así lo desee, disponiendo
del tiempo del procesador mientras en background se maneja el proceso de asignación de la dirección IP.
Inicialización de la red en 8.3 para mismo efecto de bloqueo hasta tener la IP:
puts("Inicializando la red...");
if(sock_init()){
puts("No inicializa");
exit(1);
}
CTC-017
1
CTC-017, Upgrades de Dynamic C
else {
puts("Negociando DHCP...");
while(ifpending(IF_ETH0)==IF_COMING_UP)
tcp_tick(NULL);
if(ifpending(IF_ETH0)==IF_DOWN){
puts("Error");
exit(1);
}
inet_ntoa(IPaddress,gethostid());
printf("IP Address = %s",IPaddress);
}
Por supuesto que la idea detrás de esto es aprovechar el non-blocking, simplemente se trata de un ejemplo para
equiparar la funcionalidad y resolver el inconveniente de forma inmediata. El usuario no debe olvidarse que
una nueva library significa nuevo código, y todo nuevo código debe ser probado. Al pasar a una nueva versión
de Dynamic C, si bien nuestro fuente es el mismo, es muy probable que las libraries sean diferentes, y
deberemos revisar si no afectan a nuestra aplicación.
El archivo <DC_PATH>\releasenote.txt contiene información de todas las versiones de Dynamic C desde su
origen, en él pueden apreciarse los cambios introducidos, aunque ésto no reemplaza el análisis de los ejemplos.
CTC-017
2
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertising