Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge de cambios realizados #4

Merged
merged 6 commits into from
Apr 9, 2018
Merged

Merge de cambios realizados #4

merged 6 commits into from
Apr 9, 2018

Conversation

royconejo
Copy link
Contributor

Como hablamos en la lista embebidos32, les envio los cambios propuestos y otra serie de cambios menores como consecuencia:

  1. Se incluye codigo funcional de board Edu-CIAA en LPCOpen.
  2. Cambio propuesto de .s a .S en makefile, los fundamentos estan en el issuel makefile y archivos .s #3
  3. Se modifica system.c y dos archivos de LPCOpen en board para obtener compilacion limpia con -Wall. Las modificaciones solo marcan correctamente variables no usadas para no generar warnings.
  4. Nuevo ejemplo utilizando interfaz de input de botones en la nueva board LPCOpen (blinky_input). Este es un ejericio que realize en el CESE.

En cuanto al punto 3, considero que -Wall es una herramienta fundamental. Los cambios realizados permiten compilar limpio proyectos LPCOpen con -Wall. Ignoro si proyectos con sAPI compila limpios con -Wall, pero podria ejercerse esa practica si lo consideran correcto.

Copy link
Contributor

@martinribelotta martinribelotta left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Veo bien lo de -Wall (siempre y cuando se pueda deshabilitar por variable de makefile)

Te hice algunos comentarios sobre el PR. El mas fundamental es el de la licencia. No podemos poner codigo GPL aca... Primero porque es virico y segundo porque es incompatible con lpcopen

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

La licencia de LPCOpen y la GPL son incompatibles. Los aportes al proyecto se hacen con licencia BSD.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, la cambio!

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Si, esto está aclarado en al docuwiky de la CIAA, es BSD 3 clausulas.

El tema es que si no les vuelve GPL todo el repo y queremos que lo pueda usar cualquier empresa sin obligarlos a abrir el código.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Entiendo, gracias Eric. Ya tengo todos los cambios acordados, solo resta la resolucion de un par en donde aguardo comentarios.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

¿Falta aclarar algo más?

Propongo un Pull request con las modificaciones al board (sacando lo de pragma y con comentarios en ingles). Luego vayamos discutiendo las otras cosas.

Otra vez gracias por el aporte!


#ifndef __BOARD_H_
#define __BOARD_H_
#pragma once
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Esto no es codigo conforme. Es C99 pero no es aceptable existiendo una forma legacy perfectamente compatible con todos los compiladores. Ademas, pragma once, al ser implementation-defined puede andar mal en distintas plataformas de compilación. Si existe una forma portable y segura como son los guard-defined debemos usarla

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Entiendo que en el contexto actual, los compiladores soportados por LPCOpen son Kei, IAR, Code Red y por extension GCC, no habria otros. En todos hace mas de una decada que #pragma once funciona perfecto. Igual veo que es extendido el uso de la forma clasica. Lo modifico, no hay problema.


----------------------------------------------------------------------------

Objetivo y alcance:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No hacer comentarios en español en el codigo. Usar el ingles de lengua franca.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Crei haber leido que el lenguaje oficial del proyecto CIAA era Castellano? Eso no aplica al codigo? Que raro... Hay dos opciones que puedo proponer: puedo eliminar los comentarios o bien, podria alguien prestarse a traducirlos aclarando siempre que es una traduccion del castellano y el nombre del traductor?

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Es así el tema, en el proyecto CIAA acordamos que la documentación sería en castellano y en lo posible en inglés también, mientras que en el código fuente los comentarios sean en inglés, eso es para ayudar a contribuciones extrangeras.

Algunas cosa de la documentación están en ambos idiomas, pero no contamos con traductores oficiales dentro del proyecto CIAA con lo cual escribimos ingles lo mejor que podemos cada uno. A lo sumo si alguien nos propone un mejor uso del idioma lo cambiamos.

Te propongo traducirlos voslo mejor que te parezca y lo miramos después. No tengas verguenza...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok aclarado entonces! pense que esta vez podria usar Castellano jaja :)
Ingleseo los comentarios.

Board_SPI_Init ();
Board_GPIO_Init ();
Board_I2C_Init ();
Board_ADC_Init ();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

El identado luego del nombre de la funcion rompe el estilo usado. Es discutible pero visualmente no aporta nada.
En especial la critica va por el lado de uniformidad de codigo. Si usamos este estilo de codigo tenemos que reformatear todos los archivos, ademas, no hay una regla clara de identado.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, lo modifico. Como comentario al margen (sin debatir estilos) a mi en particular me ayuda mucho el indentado vertical.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

En esto estamos usando el estilo de código de Kernigan & Ritchie.

  • En astyle el parámetro es --style=k&r
  • En Eclipse el template de codigo se llama de igual manera: Kernigan & Ritchie.
  • En embedded IDE usamos el estilo Linux.
  • En otros IDE puede variar, pero siempre esta relacionado al estilo de llaves java, es decir, attached braces.

La única desviación del estándar es el uso de 3 espacios en lugar de 1 tab.

Ver la documentacion de aspell:
http://astyle.sourceforge.net/astyle.html#_Brace_Style_Options

#define UNUSED(...) ((void) (__VA_ARGS__))
#define UNUSED1(x) (void)x
#define UNUSED2(x,y) UNUSED1(x); UNUSED1(y)
#define UNUSED3(x,y,z) UNUSED2(x,y); UNUSED1(z)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No estoy convencido que sea la mejor manera de hacer esto, mas que nada porque fuerza a usar varias macros en vez de una.
Prefiero usar el UNUSED(exp) varias veces

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A mi tampoco me gusto del todo. Cambio a UNUSED(exp) por cada una.
(La solucion correcta con VA_ARGS tokenizando parametros demanda 6 o 7 macros y me parecio exagerado para este uso)

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tratamos de no tocar tanto LPCOpen, la capa board está bien que la cambiemos, acá deberíamos tener 2, una para la CIAA-NXP y otra para la EDU-CIAA. Luego el tema dle arranque del clock. Peor más allá de eso no queremos cambiarla tanto porque si no en cada nueva versión que sale hay que tomarse el trabajo de hacerle estos cambios.

Los de la variable tmp:

(void) temp;

están para forzar que se lea la variable. No la pusieron en vano. Nosotros le agregamos el void para que no aparezca como warning.

Copy link
Contributor Author

@royconejo royconejo Apr 7, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Eric, las variables tmp funcionan exactamente igual que antes. Las dos lineas agregadas "(void) tmp;" solo sirven para marcar que tu intencion realmente es usarla como la usaste y asi el compilador no tira warnings en modo -Wall. Esto no tiene efectos secundarios en la generacion del codigo.

Lo correcto seria avisar a la gente de LPCOpen para que no tengamos que hacerlo de vuelta en cada nuevo release de ellos. Hace rato hice lo propio en ST y hubo muy buena respuesta.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Habría que probar según las opciones de optimización que no rompa en alguna combinación...

Makefile Outdated
ASRC=$(wildcard $(PROJECT_PATH_AND_NAME)/src/*.s)
ASRC+=$(foreach m, $(MODULES), $(wildcard $(m)/src/*.s))
ASRC=$(wildcard $(PROJECT_PATH_AND_NAME)/src/*.S)
ASRC+=$(foreach m, $(MODULES), $(wildcard $(m)/src/*.S))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Esto puede traer problemas en los sistemas de archivos case-insensitive. Podriamos usar en su lugar la extención *.sx que segun la documentacion de gcc hace lo mismo.
De todas formas, no encuentro problemas al compilar los archivos *.s del proyecto actual. Solo tienen comentarios que son parte de gnu-as (aunque parescan de cpp)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

La cosa no seria al reves? O sea, incluir .s o .S en case insensitive no traeria ningun problema ya que GAS siempre asume .S en esos sistemas?

Pero en Linux, por ejemplo, examples/lpcOpen/asm/first/src/zeros.S no compila con la makefile actual. Y si uno cambia .S por .s, tampoco compila ya que utiliza directivas del preprocesador.

Y como comente en el issue #3, en clase se vio justo el ejemplo que comento que no compila. Y se tuvo que hacer exactamente este cambio en la makefile, .s por .S.

La verdad, .sx no suena muy standard. Pero queda a tu decision.

Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Estoy de acuerdo, usemos .sx y .s para evitar confusiones.

Igual cundo pueda voy a probar bien que pasa si rompe algo en windows tener .s y .S.
También por qué compiló bien los .s con el cambioa .S en el makefile.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bueno, descarto este cambio. Si desean pueden dejar el issue #3 para hacer el seguimiento.

@royconejo
Copy link
Contributor Author

Aclaro lo de -Wall: Actualmente, en este framework no hay forma estandar de elegirlo o no, eso no cambio con mis aportes. Si quiero -Wall, lo que hago en mi codigo es OPT=g -Wall en el config.mk del proyecto.

@epernia epernia mentioned this pull request Apr 7, 2018
@epernia
Copy link
Owner

epernia commented Apr 7, 2018

Lo de -Wall deberíamos pensar la forma de ponerlo elegantemente.

Ese archivo config.mk esta hecho como está para que sea fácilmente generable en forma automática como hacemos con Embedded IDE.

@royconejo
Copy link
Contributor Author

Ahi pushie modificaciones, creo que estarian resueltas todas las observaciones.

@martinribelotta
Copy link
Contributor

Yo lo veo perfecto! Por mi podemos mergear sin problema. Las modificaciones de -Wall parametrizable y otros detalles (P.Ej *.s vs *.S vs *.sx) pueden quedar para futuros commits.

@royconejo
Copy link
Contributor Author

Si Martin, aquello quedara para definir a futuro.

Sobre -Wall, algo raro que note es que la makefile de firmware_v2 siempre compilo por defecto con -Wall (y expone unos cuantos warnings de LPCOpen cuando se compila para el core M0!)

@epernia epernia merged commit 9807f86 into epernia:master Apr 9, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants