A basic guide to start with the MSP320 family and the GCC tools on Linux.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

483 lines
19 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. # Guía de usuario MSP430 GCC Toolchain
  2. ------
  3. [^]: Para usuarios de Linux
  4. **Abstract**
  5. This manual aims to describe the setup and basic operations of the MSP430 GCC toolchain to know how to use the open-source GCC compiler for microcontrollers to build an example for an MSP430 target device using the command terminal of Linux. It will also be shown how to debug software with the GDB Agent and the GNU Debugger tools so that the program that was built can be uploaded to the target device successfully.
  6. ------
  7. ## Introducción
  8. El paquete GCC de código abierto es un depurador completo y una cadena de herramientas de compilación C/C++ de código abierto para la creación y depuración de aplicaciones integradas basadas en microcontroladores MSP430. Este compilador soporta todos los dispositivos MSP430 sin limitaciones de tamaño de código y se puede utilizar de forma independiente desde la línea de comandos o dentro de Code Composer Studio v6.0 o posterior [1].
  9. El paquete de instalación incluye lo siguiente:
  10. 1. Binarios GCC y GDB para Windows y Linux
  11. 2. Encabezado MSP430 y archivos de enlace
  12. 3. Código fuente
  13. 4. GBD Agent Configuration
  14. #### Instalación de MSP430 GCC como paquete independiente
  15. El primer paso es bastante sencillo, consiste en abrir la terminal de comando y direccionarse a la carpeta en donde se guardará el archivo que contenga el programa a ejecutar.
  16. Con el comando **cd** se puede entrar a alguna carpeta en específico como lo puede ser la carpeta de **Descargas**, Ejemplo:
  17. ```c
  18. $ cd Descargas
  19. ```
  20. Antes de continuar con el siguiente paso se debe dirigir a la pagina oficial de TI (Texas Instruments) y yendo directamente a la siguiente pagina [https://www.ti.com/tool/MSP430\-GCC\-OPENSOURCE]() en la pestaña de descargas seleccione la opción mas factible para su computadora en este caso **Mitto Systems GCC 64-bit Linux installer incl. support files**.
  21. Una vez descargada, se debe buscar en la carpeta de descargas el nombre del archivo.
  22. Ya una vez se tiene el nombre del archivo descargado, en la terminal de comando se debe colocar lo siguiente, lo cual nos permitirá instalar el programa, colocando sudo **chmod +x <installer>.run** y el comando **./<installer>**.
  23. ```c
  24. $ sudo chmod +x msp430-gcc-full-linux-X64-installer-9.3.1.2.run
  25. $ ./msp430-gcc-full-linux-X64-installer-9.3.1.2.run
  26. ```
  27. Lo cual abrirá la siguiente ventana:
  28. ![](/home/griscampos/Descargas/msp430Guia/1.jpeg)
  29. Seleccione el directorio de instalacion y de click en **Next** hasta finalizar .
  30. Como se muestra en la siguiente imagen.
  31. ![](/home/griscampos/Descargas/msp430Guia/2.jpeg)
  32. Crea una carpeta en donde colocaras el código.
  33. > Comando para crear carpetas desde la terminal , el comando **mkdir** + el nombre del nuevo archivo.
  34. > Comando para encontrar carpetas dentro de la carpeta en la que se encuentra **dir**.
  35. > Comando para entrar en carpeta **cd**.
  36. ```c
  37. $ mkdir Programa1
  38. $ dir
  39. $ cd Programa1
  40. ```
  41. Ya dentro de la carpeta en la que colocaras el código coloca el siguiente comando para colocar el código desde la terminal.
  42. <<<<<<< HEAD
  43. <<<<<<< HEAD
  44. <<<<<<< HEAD
  45. =======
  46. =======
  47. >>>>>>> editor
  48. =======
  49. ```c
  50. $ main.c
  51. ```
  52. En el cual se copiara y pegara cualquier código a utilizar.
  53. Ejemplo de código para hacer parpadear un led:
  54. >>>>>>> parent of c6aec50 (Ordené y corregí algunas cosas del documento en general)
  55. <<<<<<< HEAD
  56. ```c
  57. $ main.c
  58. ```
  59. En el cual se copiara y pegara cualquier código a utilizar.
  60. Ejemplo de código para hacer parpadear un led:
  61. >>>>>>> parent of c6aec50 (Ordené y corregí algunas cosas del documento en general)
  62. =======
  63. >>>>>>> editor
  64. ```c
  65. $ main.c
  66. ```
  67. En el cual se copiara y pegara cualquier código a utilizar.
  68. Ejemplo de código para hacer parpadear un led:
  69. ```c
  70. #include <msp430fr6989.h>
  71. void main(void)
  72. {
  73. WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
  74. PM5CTL0 = 0x0000; // disable high impedance mode
  75. P1DIR = 0x01; //set up bit 0 of P1 as output
  76. P1OUT = 0x00; //initialize bit 0 of P1 to 0
  77. for(;;){ //loop
  78. volatile unsigned int i;
  79. P1OUT ^= 0x01; //toggle bit 0 of P1
  80. //Delay
  81. for(i=40000; i>0;){
  82. i--;
  83. __no_operation();
  84. }
  85. }
  86. }
  87. ```
  88. #### Compilar un programa desde la termial de Linux
  89. <<<<<<< HEAD
  90. <<<<<<< HEAD
  91. <<<<<<< HEAD
  92. =======
  93. >>>>>>> editor
  94. El programa se puede compilar manualmente desde la terminal indicando las rutas de instalación de las librerías, binarios y demás, o usando un método más sencillo implementando un archivo *Makefile* incluido en los ejemplos por defecto que el paquete contiene. En este documento se muestran los pasos a seguir empleando el segundo método comenzando con la creación de un nuevo proyecto; sin embargo, a continuación, se muestra un ejemplo de compilación manual desde la terminal.
  95. Ejemplo de compilación de un programa desde la terminal (primer método):
  96. ```c
  97. $ ./msp430-elf-gcc -I ~/msp430-gcc/include -L ~/msp430-gcc/include -T ~/msp430-gcc/include/msp430fr6989.ld -mmcu=msp430fr6989 -O2 -g ~/Documentos/Code/main.c -o ~/Documentos/Code/main.o
  98. ```
  99. Primero se debe dirigir a la dirección en donde se encuentra instalado el paquete *MSP430- GCC* y redireccionarse a la carpeta *bin*.
  100. Para compilar se coloca ./ seguido de la dirección *msp430-elf-gcc*.
  101. Y después coloca los parámetros correspondientes a -I, -L, -T, -g, -o, mmcu
  102. Donde:
  103. -I :Agrega el directorio a la lista de directorios para buscar archivos de encabezado.
  104. -L: Agrega rutas en las que ld buscara bibliotecas de archivo.
  105. -T: Dirección donde se encuentra las librerías del microcontrolador\\ especificando cual utilizaras
  106. -g: dirección donde se encuentra tu archivo .c
  107. -o: dirección donde se encuentra tu archivo .c con la diferencia que se cambia el .c por .o
  108. Mmcu: especifica el microcontrolador que utilizaras
  109. ## **Creación de un nuevo proyecto**
  110. ------
  111. ##### Pasos para la creación de un nuevo proyecto
  112. 1. Crear un directorio para el nuevo proyecto.
  113. 2. Insertar el archivo .c que contiene el programa que se subirá a la tarjeta. Para crear un archivo .c vea el apartado **Creación de un archivo .c**.
  114. 3. Dentro de la carpeta que se instaló (msp430-gcc), hay un directorio llamado **examples** que contiene ejemplos predeterminados. Copiar uno de los archivos **Makefile** de los proyectos de ejemplo dentro del directorio de su nuevo proyecto.
  115. 4. Abrir el archivo **Makefile** que copió y cambiar el formato de estructura actual por el que se muestra en la Figura Estructura de archivo Makefile. En la variable **OBJECTS** se debe colocar el nombre del programa que se va a subir (archivo .c) respetando la terminación **.o**. En la variable **DEVICE** se debe colocar el nombre del microcontrolador que se usará.
  116. 5. Colocar las rutas de instalación correpondientes para las variables **GCC\_DIR** y **SUPPORT\_FILE\_DIRECTORY**. Las direcciones para las variables son **../../../bin** y **../../../include** respectivamente como se muestra en el siguiente ejemplo.
  117. ```c
  118. OBJECTS=main.o
  119. GCC_DIR = /home/usuario/msp430-gcc/bin
  120. SUPPORT_FILE_DIRECTORY = /home/usuario/msp430-gcc/include
  121. DEVICE = msp430fr6989
  122. CC = $(GCC_DIR)/msp430-elf-gcc
  123. GDB = $(GCC_DIR)/msp430-elf-gdb
  124. CFLAGS = -I $(SUPPORT_FILE_DIRECTORY) -mmcu=$(DEVICE) -O2 -g
  125. LFLAGS = -L $(SUPPORT_FILE_DIRECTORY) -T $(DEVICE).ld
  126. all: ${OBJECTS}
  127. $(CC) $(CFLAGS) $(LFLAGS) $? -o $(DEVICE).out
  128. debug: all
  129. $(GDB) $(DEVICE).out
  130. ```
  131. #### Creación de un archivo .c
  132. Para crear un archivo .c dirijase en el directorio en el que lo desea crear y digite el siguiente comando **pico filename.c**. Por fines explicativos, como ejemplo, se creará un archivo .c llamado **Ejemplo** en la carpeta **Programa1**,como se muestra el comando antes mencionado adaptado al ejemplo.
  133. ```c
  134. $ pico ejemplo.c
  135. ```
  136. =======
  137. El programa se puede compilar manualmente desde la terminal indicando las rutas de instalación de las librerías, binarios y demás, o usando un método más sencillo implementando un archivo *Makefile* incluido en los ejemplos por defecto que el paquete contiene. En este documento se muestran los pasos a seguir empleando el segundo método comenzando con la creación de un nuevo proyecto; sin embargo, a continuación, se muestra un ejemplo de compilación manual desde la terminal.
  138. Ejemplo de compilación de un programa desde la terminal (primer método):
  139. ```c
  140. $ ./msp430-elf-gcc -I ~/msp430-gcc/include -L ~/msp430-gcc/include -T ~/msp430-gcc/include/msp430fr6989.ld -mmcu=msp430fr6989 -O2 -g ~/Documentos/Code/main.c -o ~/Documentos/Code/main.o
  141. ```
  142. <<<<<<< HEAD
  143. =======
  144. El programa se puede compilar manualmente desde la terminal indicando las rutas de instalación de las librerías, binarios y demás, o usando un método más sencillo implementando un archivo *Makefile* incluido en los ejemplos por defecto que el paquete contiene. En este documento se muestran los pasos a seguir empleando el segundo método comenzando con la creación de un nuevo proyecto; sin embargo, a continuación, se muestra un ejemplo de compilación manual desde la terminal.
  145. Ejemplo de compilación de un programa desde la terminal (primer método):
  146. ```c
  147. $ ./msp430-elf-gcc -I ~/msp430-gcc/include -L ~/msp430-gcc/include -T ~/msp430-gcc/include/msp430fr6989.ld -mmcu=msp430fr6989 -O2 -g ~/Documentos/Code/main.c -o ~/Documentos/Code/main.o
  148. ```
  149. >>>>>>> parent of c6aec50 (Ordené y corregí algunas cosas del documento en general)
  150. =======
  151. >>>>>>> editor
  152. Primero se debe dirigir a la dirección en donde se encuentra instalado el paquete *MSP430- GCC* y redireccionarse a la carpeta *bin*.
  153. Para compilar se coloca ./ seguido de la dirección *msp430-elf-gcc*.
  154. Y después coloca los parámetros correspondientes a -I, -L, -T, -g, -o, mmcu
  155. Donde:
  156. -I :Agrega el directorio a la lista de directorios para buscar archivos de encabezado.
  157. -L: Agrega rutas en las que ld buscara bibliotecas de archivo.
  158. -T: Dirección donde se encuentra las librerías del microcontrolador\\ especificando cual utilizaras
  159. -g: dirección donde se encuentra tu archivo .c
  160. -o: dirección donde se encuentra tu archivo .c con la diferencia que se cambia el .c por .o
  161. Mmcu: especifica el microcontrolador que utilizaras
  162. ## **Creación de un nuevo proyecto**
  163. ------
  164. ##### Pasos para la creación de un nuevo proyecto
  165. 1. Crear un directorio para el nuevo proyecto.
  166. 2. Insertar el archivo .c que contiene el programa que se subirá a la tarjeta. Para crear un archivo .c vea el apartado **Creación de un archivo .c**.
  167. 3. Dentro de la carpeta que se instaló (msp430-gcc), hay un directorio llamado **examples** que contiene ejemplos predeterminados. Copiar uno de los archivos **Makefile** de los proyectos de ejemplo dentro del directorio de su nuevo proyecto.
  168. 4. Abrir el archivo **Makefile** que copió y cambiar el formato de estructura actual por el que se muestra en la Figura Estructura de archivo Makefile. En la variable **OBJECTS** se debe colocar el nombre del programa que se va a subir (archivo .c) respetando la terminación **.o**. En la variable **DEVICE** se debe colocar el nombre del microcontrolador que se usará.
  169. 5. Colocar las rutas de instalación correpondientes para las variables **GCC\_DIR** y **SUPPORT\_FILE\_DIRECTORY**. Las direcciones para las variables son **../../../bin** y **../../../include** respectivamente como se muestra en el siguiente ejemplo.
  170. ```c
  171. OBJECTS=main.o
  172. GCC_DIR = /home/usuario/msp430-gcc/bin
  173. SUPPORT_FILE_DIRECTORY = /home/usuario/msp430-gcc/include
  174. DEVICE = msp430fr6989
  175. CC = $(GCC_DIR)/msp430-elf-gcc
  176. GDB = $(GCC_DIR)/msp430-elf-gdb
  177. CFLAGS = -I $(SUPPORT_FILE_DIRECTORY) -mmcu=$(DEVICE) -O2 -g
  178. LFLAGS = -L $(SUPPORT_FILE_DIRECTORY) -T $(DEVICE).ld
  179. all: ${OBJECTS}
  180. $(CC) $(CFLAGS) $(LFLAGS) $? -o $(DEVICE).out
  181. debug: all
  182. $(GDB) $(DEVICE).out
  183. ```
  184. #### Creación de un archivo .c
  185. Para crear un archivo .c dirijase en el directorio en el que lo desea crear y digite el siguiente comando **pico filename.c**. Por fines explicativos, como ejemplo, se creará un archivo .c llamado **Ejemplo** en la carpeta **Programa1**,como se muestra el comando antes mencionado adaptado al ejemplo.
  186. ```c
  187. $ pico ejemplo.c
  188. ```
  189. <<<<<<< HEAD
  190. <<<<<<< HEAD
  191. >>>>>>> parent of c6aec50 (Ordené y corregí algunas cosas del documento en general)
  192. =======
  193. =======
  194. >>>>>>> editor
  195. >>>>>>> parent of c6aec50 (Ordené y corregí algunas cosas del documento en general)
  196. Para crear un archivo .c dirijase en el directorio en el que lo desea crear y digite el siguiente comando **pico filename.c**. Por fines explicativos, como ejemplo, se creará un archivo .c llamado **Ejemplo** en la carpeta **Programa1**, en la Figura se muestra el comando antes mencionado adaptado al ejemplo.
  197. ```c
  198. #include <msp430fr6989.h>
  199. int main(void) {
  200. volatile int i;
  201. // stop watchdog timer
  202. WDTCTL = WDTPW | WDTHOLD;
  203. // set up bit 0 of P1 as output
  204. P1DIR = 0x01;
  205. // intialize bit 0 of P1 to 0
  206. P1OUT = 0x00;
  207. // loop forever
  208. for (;;) {
  209. // toggle bit 0 of P1
  210. P1OUT ^= 0x01;
  211. // delay for a while
  212. for (i = 0; i < 0x6000; i++);
  213. [ 26 líneas leídas ]
  214. ^G Ayuda ^O Guardar ^W Buscar ^K Cortar ^T Ejecutar ^C Ubicación M-U Deshacer M-A Poner marca M-] A llave M-Q Anterior ^B Atrás ^◂ Palabr ant
  215. ^X Salir ^R Leer fich. ^\ Reemplazar ^U Pegar ^J Justificar ^/ Ir a línea M-E Rehacer M-6 Copiar ^Q Buscar atrás M-W Siguiente ^F Adelante ^▸ Palabra Siguiente
  216. ```
  217. ## **Debugging**
  218. #### **Uso del agente GDB **
  219. ###### Introducción
  220. El agente GDB es una herramienta para conectar el GDB con el hardware de destino para depurar su software. El GDB
  221. El agente utiliza la pila de depuración MSP430 para conectarse al hardware y proporciona una interfaz al GDB.
  222. En Windows, se proporciona una consola y una versión de aplicación GUI del agente GDB. Solo la aplicación de consola es compatible con Linux.
  223. #### Iniciando GDB Agent
  224. ###### Línea de comando
  225. Abra una terminal de comando y dirijase al directorio de instalación, una vez que lo haga, ejecute lo siguiente:
  226. ```c
  227. $ ./bin/gdb\_agent\_console msp430.dat
  228. ```
  229. La aplicación de consola abre un puerto TCP/IP en el equipo local. Muestra el número de puerto en la consola. Por defecto, este número de puerto es 55000.
  230. [^]: Es importante que deje abierta esta consola hasta terminar de depurar el programa (debugging) para poder conectar el GDB con el GDB Agent.
  231. ```c
  232. $ ./bin/gdb\_agent\_console msp430.dat
  233. CPU Name Port
  234. -------- ----
  235. msp430 :55000
  236. Starting all cores
  237. CPU Name Status
  238. -------- ------
  239. msp430 Waiting for client
  240. ```
  241. #### Debugging con GDB
  242. ##### Ejecutar un programa en el debugger
  243. 1. Abra otra terminal de comando y dirijase a la ruta donde se encuentra el directorio con el archivo **.c** y el Makefile del programa que quiere cargar a la tarjeta.
  244. 2. Escriba el comando **make debug**. Este comando inicia el GDB y espera que se introduzcan comandos, esto es indicado por el puntero **(gdb)**.
  245. ```c
  246. $ make debug
  247. /home/usuario/msp430-gcc/bin/msp430-elf-gcc -I /home/usuario/msp430-gcc/include -mmcu=msp430fr6989 -O2 -g -L /home/usuario/msp430-gcc/include -T msp430fr6989.ld Ejemplo.o -o msp430fr6989.out
  248. /home/usuario/msp430-gcc/bin/msp430-elf-gdb msp430fr6989.out
  249. GNU gdb (Mitto Systems Limited - msp430-gcc 9.3.1.11) 9.1
  250. Copyright (C) 2020 Free Software Foundation, Inc.
  251. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
  252. This is free software: you are free to change and redistribute it.
  253. There is NO WARRANTY, to the extent permitted by law.
  254. Type "show copying" and "show warranty" for details.
  255. This GDB was configured as "--host=x86_64-pc-linux-gnu --target=msp430-elf".
  256. Type "show configuration" for configuration details.
  257. For bug reporting instructions, please see:
  258. <http://www.gnu.org/software/gdb/bugs/>.
  259. Find the GDB manual and other documentation resources online at:
  260. <http://www.gnu.org/software/gdb/documentation/>.
  261. For help, type "help".
  262. Type "apropos word" to search for commands related to "word"...
  263. Reading symbols from msp430fr6989.out...
  264. (gdb)
  265. ```
  266. 3. Conecte el dispositivo.
  267. 4. Escriba el comando **target remote :55000** y presione enter para conectar el GDB con el GDB Agent que se encuentra en la otra terminal de comando que se dejó abierta. En la otra terminal se podrá observar en la consola del GDB Agent que se conectó un dispositivo/cliente.
  268. ```c
  269. Reading symbols from msp430fr6989.out...
  270. (gdb) target remote :55000
  271. Remote debugging using :55000
  272. 0x00004402 in __crt0_start ()
  273. (gdb)
  274. ```
  275. Consola del GDB Agent:
  276. ```c
  277. $ ./bin/gdb\_agent\_console msp430.dat
  278. CPU Name Port
  279. -------- ----
  280. msp430 :55000
  281. Starting all cores
  282. CPU Name Status
  283. -------- ------
  284. msp430 Waiting for client
  285. msp430 Client connected...Connecting to Target
  286. Found USB FET at ttyACM0
  287. Target connected...Starting server
  288. ```
  289. 5. Escriba **load** y presione enter para cargar el programa binario al dispositivo MSP430 que esté usando.
  290. ```c
  291. (gdb) load
  292. Loading section .upper.data, size 0x2 lma 0x4400
  293. Loading section .text, size 0x3c lma 0x4402
  294. Loading section __reset_vector, size 0x2 lma 0xfffe
  295. Start address 0x00004402, load size 64
  296. Transfer rate: 71 bytes/sec, 21 bytes/write.
  297. (gdb)
  298. ```
  299. 6. Escriba el comando **continue** para correr el programa o en su defecto escriba **step** para compilar elprograma por partes.
  300. ```c
  301. (gdb) continue
  302. Continuing.
  303. ```
  304. 7. Para parar la ejecución teclee **Ctrl + C** (^C), y para salir del GDB escriba **q**, presione enter y posteriormente escriba **y** y presione enter.
  305. ```c
  306. ^C
  307. Program stopped.
  308. main () at Ejemplo.c:15
  309. 15 i--;
  310. (gdb) q
  311. A debugging session is active.
  312. Inferior 1 [Remote target] will be detached.
  313. Quit anyway? (y or n) y
  314. Detaching from program: /home/usuario/Escritorio/msp430_programs/Programa1/msp430fr6989.out, Remote target
  315. Ending remote debugging.
  316. [Inferior 1 (Remote target) detached]
  317. ```
  318. ### **Solución de problemas**
  319. [^]: En este apartado se muestran las posibles soluciones a los problemas más comunes.
  320. **Error Make debug*
  321. ```c
  322. $ make debug
  323. Make: *** There is no rule to build the 'debug' target. Tall
  324. ```
  325. Instala make para solucionar el problema mediante el comando :
  326. ```c
  327. sudo apt-get install make
  328. ```
  329. ------
  330. **Error 127 makefile debug*
  331. ```c
  332. /home/usuario/msp430-gcc/bin/msp430-elf-gdb:error while loading shared libraries: libncursesw.so.5: cannot open shared object file: No such file or directory
  333. make: *** [Makefile: debug] Error 127
  334. ```
  335. Instala la libreria libncursesw.so.5 para solucionar el problema mediante el comando :
  336. ```c
  337. sudo apt-get install libncursesw.so.5
  338. ```
  339. <<<<<<< HEAD
  340. ### **Referencia**
  341. <<<<<<< HEAD
  342. [1] Texas Instruments. Msp430-gcc-opensource gcc-open source compiler for msp microcontrollers, 2017.
  343. =======
  344. ------
  345. >>>>>>> ae78620e48dc821fc33b729ff6f00058750ec868
  346. <<<<<<< HEAD
  347. =======
  348. >>>>>>> parent of c6aec50 (Ordené y corregí algunas cosas del documento en general)
  349. =======
  350. >>>>>>> parent of c6aec50 (Ordené y corregí algunas cosas del documento en general)