Practica 3 p2

Requerimientos:

  • Practica 3 Parte 1.

Procedimiento:

  • En base a la practica 3 parte 1 donde usted hizo la descripcion de hw de un procesador Nios II, ahora usted aprendera a programar este procesador usando Eclipse, para esto debe haber terminado a cabalidad toda la parte 1, de lo contrario no podra entender lo que se haga.

  • Si por algun motivo tuvo errores he aqui la solucion solo para guiarse: Solucion.

  • Abra el "Nios II XX Software Build Tools for Eclipse" como administrador.

    • Ahora vaya a File-> New-> Nios II Application and BSP From Template

    • Ahora seleccione la ruta donde tiene el proyecto Quartus(Que no debe tener espacios) y seleccione el archivo .sopcinfo, luego llame al proyecto "Mi_primera_vez" y seleccione el template llamado "Hello MicroC/OS-II" luego oprima finish.

    • Ahora apareceran al lado dos carpetas una llamada "mi_primera vez" y la otra "mi_primera_vez_bsp", la que tiene el bsp contiene los drivers del sistema y la capa de HAL(Hardware abstraction layer) del procesador que usted describio, en esta encontrara un archivo llamado "system.h" abralo y explorerlo para buscar el periferico "LED" que usted creo cuando describio en el Qsys, el tiene una base de direccion(Direccion en la arquitectura) para acceder al puerto.

  • Ahora programe el .sof y sobre la otra carpeta haga build para compilar el software del procesador para probar su funcionamiento.

  • Compilado correctamente el software debera aparecer un nuevo archivo en la carpeta del proyecto eclipse "mi_primera_vez" llamado mi_primera_vez.elf

  • ahora de click derecho sobre la carpeta y programe el procesador Nios II:

  • Una vez programado deberia aparecer en la consola lo siguiente

  • Ahora procedamos analizar el codigo C que esta como base del proyecto:

  • Para crear multiasking usando el procesador Nios II, estamos usando el MicroC/OS-II, en el main siempre se deben crear las tareas de la forma como se muestra anteriormente y luego se ejecuta el sistema operativo.

  • Cada tarea debe tener prioridad y el OS le dara mas tiempo entre mayor prioridad tenga, en el caso de que las dos tengan igual numero de prioridad estas seran igual de importantes, la estructura de las tareas se explica acontinuacion:

  • Ahora modifiquemos el codigo para prender y apagar los LEDs que estan en la board usando el procesador Nios II que esta enlazado por medio del puerto LED. para esto modifique el codigo de la siguiente manera

#include <stdio.h>

#include "includes.h"

#include <system.h>

#include "io.h"

/* Definition of Task Stacks */

#define TASK_STACKSIZE 2048

OS_STK task1_stk[TASK_STACKSIZE];

OS_STK task2_stk[TASK_STACKSIZE];

/* Definition of Task Priorities */

#define TASK1_PRIORITY 1

#define TASK2_PRIORITY 2

/* Prints "Hello World" and sleeps for three seconds */

void task1(void* pdata)

{

unsigned char count=0;

while (1)

{

count++;

IOWR(LED_BASE,0,~count);

OSTimeDlyHMSM(0, 0, 0, 100);

}

}

void task2(void* pdata)

{

unsigned char switches=0;

while (1)

{

switches=IORD(SW_BASE,0);

switch(switches)

{

case 0x0: printf("a\n"); break;

case 0x1: printf("b\n"); break;

case 0x2: printf("c\n"); break;

case 0x3: printf("d\n"); break;

case 0x4: printf("e\n"); break;

case 0x5: printf("f\n"); break;

case 0x6: printf("g\n"); break;

default: printf("hola\n"); break;

}

OSTimeDlyHMSM(0, 0, 1, 0);

}

}

OSTaskCreateExt(task1,

NULL,

(void *)&task1_stk[TASK_STACKSIZE-1],

TASK1_PRIORITY,

TASK1_PRIORITY,

task1_stk,

TASK_STACKSIZE,

NULL,

0);

OSTaskCreateExt(task2,

NULL,

(void *)&task2_stk[TASK_STACKSIZE-1],

TASK2_PRIORITY,

TASK2_PRIORITY,

task2_stk,

TASK_STACKSIZE,

NULL,

0);

OSStart();

return 0;

}

  • Compile el proyecto y programelo sobre el procesador Nios II, y determine que hace el codigo.

  • Ahora agregue una nueva tarea(Task 3) que cada vez que detecte que el SW 4 esta en 0 esta prendido imprima "Hola soy UDI" cada 200 ms de lo contrario que imprima "Nemesis" cada segundo.