Autor Tema: Busco consejo sobre que lenguaje conviene aprender  (Leído 15889 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jansuini

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 566
Re: Busco consejo sobre que lenguaje conviene aprender
« Respuesta #15 en: 01 de Enero de 2015, 15:19:20 »
Charly:
Hay un par de PDFs de cursos para iniciarse con el C de CCS ,uno en castellano y otro del mismo CCS para implementarlo con una plaquita de desarrollo vendida por ellos.-
Si los encuentro te los envio.-
Lo que te sugiero también ,que es bastante práctico el ICD de CCS ,venía uno por puerto serie y era interesante para seguir el desarrollo pasao a paso de un programa.-
Imagino que en google algo debe aparecer.-

Sds.-
Jorge

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Busco consejo sobre que lenguaje conviene aprender
« Respuesta #16 en: 01 de Enero de 2015, 16:09:06 »
Chaly, yo te recomiendo empezar con XC8 de Microchip. Verás que lo que hacías en ASM lo deberás seguir usando en XC8... pero ahora en C. Podrás ver equivalencias entre lo que hacías en ensamblador y lo que ahora tendrás que hacer en C.

Ya lo he mencionado antes, CCS es como Arduino, te ayuda a desarrollar funcionalidades muy rápidamente, pero no te ayuda a aprender qué hace el microcontrolador directamente. ElGarbe lo describe como funciones enlatadas de CCS. XC sí te permite ver qué hace el micro.

Sabiendo que eres bueno en ASM, moverte a un compilador en donde haces todo desde cero no te costará trabajo y sólo deberás enfocarte en aprender C.

Como primera práctica te sugiero que prendas un LED. Vas a tener que configurar los registros de configuración del PIC, aprender a usar la función main en C, aprender a escribir registros, etc. Te llevará un ratito, pero habrás aprendido mucho.

Y si se te complica algo, pues para eso estamos... para complicártelo más jajaj no es cierto... ya sabes para qué estamos.

Saludos.  8)
« Última modificación: 01 de Enero de 2015, 16:17:35 por migsantiago »

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Busco consejo sobre que lenguaje conviene aprender
« Respuesta #17 en: 01 de Enero de 2015, 16:14:50 »
+1 no hace mucho que aprendi lo que comentas y aun me cuesta acostumbrarme.
No estaría mal un post con "buenas practicas de programacion", no?

Saludos!

Hola ElGarbe, normalmente esas prácticas se pueden encapsular como estándares de programación. Cómo escribir nombres de variables, dónde usar typedefs, estilos de estructuración del código, estilos de funciones y dónde usarlas, sabiendo usar static, espacios en el código, etc.

Aquí un ejemplo...

http://users.ece.cmu.edu/~eno/coding/CCodingStandard.html

Facilitan mucho la vida... no sólo para hacer el código portable, sino también para hacerlo legible.  ;-)

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Busco consejo sobre que lenguaje conviene aprender
« Respuesta #18 en: 01 de Enero de 2015, 16:55:02 »
+1 no hace mucho que aprendi lo que comentas y aun me cuesta acostumbrarme.
No estaría mal un post con "buenas practicas de programacion", no?

Saludos!

Hola ElGarbe, normalmente esas prácticas se pueden encapsular como estándares de programación. Cómo escribir nombres de variables, dónde usar typedefs, estilos de estructuración del código, estilos de funciones y dónde usarlas, sabiendo usar static, espacios en el código, etc.

Aquí un ejemplo...

http://users.ece.cmu.edu/~eno/coding/CCodingStandard.html

Facilitan mucho la vida... no sólo para hacer el código portable, sino también para hacerlo legible.  ;-)
Uffff, cuantas cosas me faltan! Que lindo sería saber todo eso, estoy con unos desarrollos que serían mas que interesante aplicar todas esas pautas!
Tendrás algo como para ampliar en cuanto a layers?

Saludos!
-
Leonardo Garberoglio

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re: Busco consejo sobre que lenguaje conviene aprender
« Respuesta #19 en: 01 de Enero de 2015, 17:40:13 »
Carlos y esa sería tu segunda búsqueda una vez elegido el lenguaje. ¿qué compilador escoger? ¿cuál es más fácil? ¿cuál es mas potente?  :D

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Busco consejo sobre que lenguaje conviene aprender
« Respuesta #20 en: 01 de Enero de 2015, 18:35:42 »
Uffff, cuantas cosas me faltan! Que lindo sería saber todo eso, estoy con unos desarrollos que serían mas que interesante aplicar todas esas pautas!
Tendrás algo como para ampliar en cuanto a layers?

Saludos!

Mmmhh... ¿a qué te refieres con layers?

Desconectado elgarbe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Busco consejo sobre que lenguaje conviene aprender
« Respuesta #21 en: 01 de Enero de 2015, 19:01:29 »
Uffff, cuantas cosas me faltan! Que lindo sería saber todo eso, estoy con unos desarrollos que serían mas que interesante aplicar todas esas pautas!
Tendrás algo como para ampliar en cuanto a layers?

Saludos!

Mmmhh... ¿a qué te refieres con layers?

http://users.ece.cmu.edu/~eno/coding/CCodingStandard.html#layering

entiendo que en muchos sistemas complejos suele utilizarzo algo llamado HAL (hardware abstraction layer) y luego la capa del Sistema propiamente dicho, lo que facilita la portabilidad del sistema a otro hardware/uC...

Pero quizá esto de para otro post, no quiero desvirtuarle el post a Carlos.

Saludos y gracias!
-
Leonardo Garberoglio

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Busco consejo sobre que lenguaje conviene aprender
« Respuesta #22 en: 01 de Enero de 2015, 20:07:28 »

entiendo que en muchos sistemas complejos suele utilizarzo algo llamado HAL (hardware abstraction layer) y luego la capa del Sistema propiamente dicho, lo que facilita la portabilidad del sistema a otro hardware/uC...

Pero quizá esto de para otro post, no quiero desvirtuarle el post a Carlos.

Saludos y gracias!

El post creo que ya tuvo su resultado, solo le queda decidirse por un compilador pero eso va a depender de el.

El HAL pensalo como una API de perifericos. Un ejemplo seria no pensar en los registros, sino que directametne pongas UART(baudios,bits de datos,bit de stop, paridad, pines) y listo ya tenes configurado tu UART sin siquiera saber como funciona el hardware o los bits de interrupcion, etc.

Primer capa - funciones para la modificacion de los registros seria un ejemplo, puede ser en ASM o C como quieras. Estas retornan valores para la segunda capa, esos valores deberian tener un estándar, y para cualquier micro cumplirse el mismo ( asi no cambias la segunda capa para nada)
Segunda capa - Que haga algo mas elaborado, siguiendo el ejemplo de la UART, calcular los baudios, setear registros usando las funciones SOLO de la primer capa. Crear una funcion para enviar un byte, tambien un standar para comunicarse con la tercer capa.
Tercer capa - El uso del printf para enviar una cadena + variables usando lo de la segunda capa nomas.

A su ves podria tener otra tercer capa de otro modulo que me permita debuggear por ejemplo por el UART y usar el printf, ya que ambas son de 3er capa y se deberia poder comunicar

La abstraccion del hardware cada ves es mayor ( menos te interesan los registros, los bits, como configurarlos, etc ). La portabilidad es de las capas superiorres pero si o si deberias de modificar la primer capa que seria la distintiva del micro.
Entonces modificando la primera deberias tener funcionando todo lo demas. O teniendo la primera podes definirla para varios micro con IFDEF

Esta mas que claro que esto seria para un proyecto donde no exista ninguna API ni nada por el estilo y se comenzara de 0.

Ejemplos donde ocurre esto hay varios pero por ejemplo las librerias Fatfs de chan, tenes todas sus funciones pero tenes que definir la conexcion, la inicializacion del hard(SPI), el timer en otro archivo entre otros.
Otro tambien muy simple de ver es una comunicacion http, http usa TCP ( pero TCP es tambien usado por FTP,POP, entre otros ) , TCP usa IP ( pero tambien UDP usa IP ) y asi bajando hasta lo que es el hw como ethernet,token ring, entre otros
« Última modificación: 01 de Enero de 2015, 23:15:40 por KILLERJC »

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Busco consejo sobre que lenguaje conviene aprender
« Respuesta #23 en: 01 de Enero de 2015, 20:36:52 »
Ohh ya entendí. Si gustas abre un tema nuevo y por allá lo platicamos. Las HAL son muy prácticas. Yo acostumbro hacer APIs con callbacks.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Busco consejo sobre que lenguaje conviene aprender
« Respuesta #24 en: 02 de Enero de 2015, 00:50:28 »
Hola y gracias a todos nuevamente, que calidad de respuestas están posteando, realmente muy buenas y muy claras.

Pues bueno, creo que lo más conveniente para mi caso y porque varios han acertado en el mismo diría que elegiré el XC8, como ya e intentado con el CCS y no e conseguido mucho, y los que saben dicen que en muchas definiciones es similar al .asm, se cae de maduro que lo lógico sería el XC8.

KILLERJC, muy buenos tus datos, creo y por la mirada rápida que e echado a cada link que me será más fácil de entender con estos datos que aportaste. Ahora tendré que ponerme a estudiar un poco.  ;-)

Ya estoy descargando (calculo es la versión FREE) de la página de microchip, imagino que sabiendo programar en XC8 luego en XC16 y XC32 debe de ser muy similar. ¿Es esto así?

Nuevamente, muchas gracias por sus prontas respuestas.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: Busco consejo sobre que lenguaje conviene aprender
« Respuesta #25 en: 02 de Enero de 2015, 07:46:44 »
Hola Carlos. Imagíno que sabes que el compilador convierte el código C a ensamblador y a código máquina.
La mayoría de compiladores te dan la opción de ver este código ensamblador junto al código C que lo ha generado.
De esta manera puedes hacer mejor la transición al C.



El compilador que conozco que genera código ASM más limpio es el CCX5:
http://www.bknd.com/cc5x

Es gratuíto y bastante bueno. Si vienes del ASM, te resultará mucho más facil entender su código generado.
La parte negativa es que no se adapta exactamente al estandar C y que más tarde o temprano tendrás que pasar a otro como el XC8.
En todo caso es muy muy semejante a otros compiladores. Lo único que cambian son detalles como el nombre de las rutinas de interrupción o la forma de declarar los bits.


Ejemplo en código C:
Código: [Seleccionar]
#include "16F883.H"      // Define el microcontrolador que se va a utilizar

#pragma origin = 0x10    // Dirección de origen del código
 
void main(void) {        // Función principal (Siempre se llama main)
   unsigned char i;      // Declaro una variable llamada i como un byte (un caracter char) sin signo
  
   TRISB.7 = 0;          // Puerto B7 es una salida
  
   i = 100;              // La variable i es igual a 100
   do {
      PORTB.7 = 1;       // El puerto B7 vale 1
      PORTB.7 = 0;        
   } while (--i != 0);   // Decrementa la variable i.
                         // Repite el bucle mientras i no valga cero
}

Código ensamblador generado:
Código: [Seleccionar]
; CC5X Version 3.5, Copyright (c) B Knudsen Data
; C compiler for the PICmicro family
; ************   2. Jan 2015  11:45  *************

processor  16F883
radix  DEC

PORTB       EQU   0x06
TRISB       EQU   0x86
RP0         EQU   5
RP1         EQU   6
i           EQU   0x20

GOTO main

  ; FILE mini.c
;#include "16F883.H"      // Define el microcontrolador que se va a utilizar
;
;#pragma origin = 0x10    // Dirección de origen del código
ORG 0x0010
;
;void main(void) {        // Función principal (Siempre se llama main)
main
;   unsigned char i;      // Declaro una variable llamada i como un byte (un caracter char) sin signo
;  
;   TRISB.7 = 0;          // Puerto B7 es una salida
BSF   0x03,RP0
BCF   0x03,RP1
BCF   TRISB,7
;  
;   i = 100;              // La variable i es igual a 100
MOVLW 100
BCF   0x03,RP0
MOVWF i
;   do {
;      PORTB.7 = 1;       // El puerto B7 vale 1
m001 BCF   0x03,RP0
BCF   0x03,RP1
BSF   PORTB,7
;      PORTB.7 = 0;        
BCF   PORTB,7
;   } while (--i != 0);   // Decrementa la variable i.
DECFSZ i,1
GOTO  m001
;                         // Repite el bucle mientras i no valga cero
;}
SLEEP
GOTO main

END


; *** KEY INFO ***

; 0x0010 P0   14 word(s)  0 % : main

; RAM usage: 1 bytes (1 local), 255 bytes free
; Maximum call level: 0
;  Codepage 0 has   15 word(s) :   0 %
;  Codepage 1 has    0 word(s) :   0 %
; Total of 15 code words (0 %)


Un saludo.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Busco consejo sobre que lenguaje conviene aprender
« Respuesta #26 en: 02 de Enero de 2015, 09:27:47 »
Hola Picuino. Que madrugón para empezar a contestar  ((:-))  ((:-))

Si, ya sabía que es posible ver el código .asm ya sea usando compiladores C o BASIC, por supuesto eso es una ventaja. Pero creo que prefiero directamente iniciar en XC8 para no hacerme tanto matete en la cabeza y arrancar de una con el programa definitivo que voy a usar.
Por supuesto es de suponer que por ahí cueste un poco más que usando el CCX5, pero e estado mirando ejemplos en XC8 y creo que los e entendido mejor que por ejemplo en CCS, por supuesto estos eran programas ejemplos muy básicos, pero como que me fue más intuitivo ya que XC8 usa definiciones más parecidas al .asm, tal cual como me lo a comentado elgarbe y migsantiago

Veremos que pasa, igual muchas gracias por el aporte.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Busco consejo sobre que lenguaje conviene aprender
« Respuesta #27 en: 03 de Enero de 2015, 00:46:39 »
Hola a todos, este post solo es para aclarar la siguiente linea que e escrito:

Hola Picuino. Que madrugón para empezar a contestar  ((:-))  ((:-))

Madrugón sería levantarse temprano por la mañana, y resulta que cuando veo la hora de la última respuesta de Picuino serían las 7:30 hora local para mí, y me causo gracia y admiración que alguien este tan temprano respondiendo por el foro. Pero claro, después caí en la cuenta que don Picuino es de España y para el serían las 12:30.

Como hubo una mal interpretación del mensaje, que por supuesto fue solo en tono humorístico, es que en estas líneas aclaro este punto, para que nadie tome a mal lo por mí escrito.

De más esta decir que el foro está "abierto" las 24 Hs y cada cual es libre ya sea de preguntar o responder a la hora que le plazca o le quede más cómodo, este horario lo rige el participante y por supuesto nadie debe sentirse contrariado por esto.

Pido perdón por la mala interpretación que haya podido generar mi mensaje, tal como ya lo dije no a sido para ofender o molestar a nadie.

Por supuesto y desde ya estoy muy agradecido a todos los que han respondido a mis preguntas por invertir su tan valioso tiempo, y por ser parte de este foro.

Sin más pido disculpas nuevamente.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: Busco consejo sobre que lenguaje conviene aprender
« Respuesta #28 en: 03 de Enero de 2015, 14:34:55 »
Hola Carlos, disculpa por el malentendido.

Un saludo.

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5892
    • Picuino
Re: Busco consejo sobre que lenguaje conviene aprender
« Respuesta #29 en: 03 de Enero de 2015, 15:05:53 »
Te comento sobre el XC8 con el que ahora estoy programando.

El programar en C te da la facilidad de manejar datos complejos con facilidad.
Tengo una estructura de datos que contiene 4 bytes, cada uno con su significado.
Por otro lado tengo un array que contiene 6 estructuras iguales (una especie de base de datos)
He programado una operación en la que se copia la estructura en una posición del array:

    keyb_database[ i ] = keyb;

Con esto guardo los 4 bytes de la estructura keyb en la posición i del array. El código generado por XC8 para hacer esto es de 20 instrucciones:

Código: [Seleccionar]
0149  0872     MOVF i, W
014A  00F1     MOVWF 0x71
014B  3001     MOVLW 0x1
014C  35F1     LSLF 0x71, F
014D  3EFF     ADDLW 0xFF
014E  1D03     BTFSS STATUS, 0x2
014F  294C     GOTO 0x14C
0150  3571     LSLF 0x71, W
0151  3E20     ADDLW 0x20
0152  0086     MOVWF FSR1
0153  0187     CLRF FSR1H
0154  0020     MOVLB 0x0
0155  0840     MOVF keyb, W
0156  3FC0     MOVWI [0]FSR1
0157  0841     MOVF 0x41, W
0158  3FC1     MOVWI [1]FSR1
0159  0842     MOVF 0x42, W
015A  3FC2     MOVWI [2]FSR1
015B  0843     MOVF 0x43, W
015C  3FC3     MOVWI [3]FSR1

Cuando manejas datos en coma flotante, pasa lo mismo. Una sola instrucción en C, te ahorra escribir muchas instrucciones en código máquina y reescribirlas cuando cambias de microcontrolador.

P.D.: Utilizo el compilador free, sin optimizaciones, por eso puede que haya más instrucciones ASM que en el compilador Full.


Un saludo y mucho ánimo con el nuevo lenguaje.