Written by Jesus

 
 
 
 
INTRODUCCIÓN  
 
Una de las alternativas para programar sistemas empotrados hoy en día son los llamados sistemas operativos de tiempo real (SOTR). Su característica principal es que ofrecen al programador toda una serie de servicios orientados a la implementacion de sistemas de tiempo real en general, y sistemas empotrados en particular, lo cual no es habitual en los sistemas operativos normales. Algunos presentan la apariencia tipica de un sistema operativo en el sentido habitual del termino, con sistemas de ventanas, sistema de ficheros, acceso a redes y entornos de desarrollo, mientras que otros, denominados núcleos de tiempo real (real-time kernels), son librerías de funciones, normalmente en C.
En la siguiente practica, consideraremos la utilización del núcleo de tiempo real µC/OS-II
 
 
 
 
 
 
 
Preemptive: µC/OS-II is a fully-preemptive real-time kernel. This means that µC/OS-II always runs the highest priority task that is ready. Most commercial kernels are preemptive and µC/OS-II is comparable in performance with many of them. 
 

La multitarea apropiativa (del inglés “preemptive multitasking”) es una manera en que los sistemas operativos pueden proveer multitarea, es decir, la posibilidad de ejecutar múltiples procesos al mismo tiempo. Con la multitarea apropiativa, el sistema operativo asigna tiempos de CPU a los procesos que se están ejecutando. Por cada núcleo de la CPU, se puede ejecutar a lo sumo un proceso en cada momento. Al proceso actual, el sistema le asigna un intervalo de tiempo para ejecutarse; una vez acabado el tiempo, el proceso queda pausado y se destina el siguiente intervalo de tiempo a un proceso distinto. Eventualmente, el primer proceso volverá a recibir intervalos para seguir ejecutándose, hasta que finalice su ejecución, y lo mismo pasará con los demás.

Para decidir a qué proceso asignar el próximo intervalo de tiempo de ejecución, el sistema operativo dispone de un componente llamado planificador. Hay diversos criterios que se pueden adoptar.

 
 
 
 
PROCEDIMIENTO
 
El primer paso es utilizar el proyecto de DE0_NANO_SOC_practica_nios2_Karplus_Strong_restored   que encontrara al final de esta pagina, Ya que este contiene el timer_ece10243upb2016 creado en la practica #5 de Nios II.
 
Lo guardara en una ruta cercana a C: y tendrá en cuenta la dirección de la ubicación mas adelante. 
 
Ejecutelo y proceda a dar click en Assembler
 
Mientras nuestro programa compila, abra Nios ll 15.0 Software Build Tools For Eclipse  y cree un nuevo File---Nios II Application and BSP from Template 
en SOPC Information File name buscaremos la ruta donde fue guardado el proyecto de DE0_NANO_SOC_practica_nios2_Karplus_Strong_restored y agregue el arcivo .sopcinfo
 
 
Damos nombre a nuestro proyecto en este caso UCOS_Practica_1 y en Templates seleccionamos Hello MicroC/OS-II
 
 
se debe tener algo así en Project Explorer, dos carpetas con el nombre de nuestro proyecto UCOS_practica_1
 
 
Abramos la carpeta de UCOS_practica_1 y demos dobleclick en el .c y analicemos el código.
 
Aparecen dos librerías, <stdio.h> es la que ya conocemos la cual nos permite utilizar el printf y aparece <includes.h>, esta contiene la transfiguración del sistema operativo Ucos II y todas las librerías necesarias para utilizar el sistema operativo, siempre que se quiera utilizar el sistema operativo se debe incluir <includes.h>
 
tenemos un #define TASK_STACKSIZE,  esto define el tamaño del stack por tarea, quiere decir que en este caso el stack de cada tarea tiene un tamaño de 2048 (2k)
los OS_STK son los procesos cuantos procesos se quieran añadir se tiene que añadir con  OS_STK, en este caso hay 2 procesos (Tareas)
 
tenemos lo que son las definiciones de las prioridades, que quiere decir esto, cada tarea tiene una prioridad para ejecutarse, a la cual se le destina mas proceso del nios,  entre menor sea el numero mas prioridad tiene la tarea para ejecutarse (Duda)
 
miremos el main y analicemos. 
 
tenemos una función llamada OSTaskCreateExt
 
esta función es especial del sistema operativo, esta función es similar a OSTaskCreate () salvo que permite obtener información adicional acerca de una tarea que se determine.
 
el primer argumento es la tarea,es un puntero al codigo de la tarea,el segundo argumento es un Puntero al área de datos es opcional; se utiliza para pasar parámetros a la tarea al inicio de la ejecución, el tercer argumento es la prioridad, entre menor sea el numero, mayor sera su prioridad NOTA: dos tareas no pueden tener la misma prioridad.
OSStart inicia el proceso de  multitarea.
 
 
OSTimeDlyHMSM tiempo de ejecución de la tarea, H(Horas), M(minutos), S(segundos),M(milisegundos).
 
luego de analizar el código, vamos a crear una nueva tarea nueva.
añadimos:
OS_STK    leds_stk[TASK_STACKSIZE];
#define LEDS_PRIORITY 3 (las prioridades no pueden ser iguales, notese que cada una tiene prioridades diferentes)
 
añadimos:
 
el código siguiente 
 
y dentro del main 
 
así creamos nuestra nueva tarea, ahora tenemos tres tareas de prioridad 1 2 y 3 y cada una con un tiempo de ejecución de 3 segundos, imprimiendo (hello from task1,hello from task2,hello from leds_task) respectivamente.
 
 
ahora vamos a asignar a cada tarea una ejecución y utilizaremos los leds para ello.
 
copiemos el siguiente codigo dentro del while de la tarea leds_task
 
 
 
 
para hacer acceso a los leds necesitamos agragar el  system.h y io.h
 
nuestro periférico se llama LEDS_BASE, para verificarlos debería salir en el system.h
 
lo que haremos ahora es reemplazar en cada while de las demas tareas ese mismo codigo, y tenemos lo siguiente 
 
 
cada tarea tiene tiempos diferentes, note que leds_task es de 1 segundo, task1 es de 500 milisegundos y task2 es de 1 segundo.
ya terminando el codigo vamos a Ucos_practica_1_bsp  y generamos el bsp
 
 
luego en Ucos_practica_1 y vamos a propiedades
se desplegara las siguiente ventana, donde se seleccionara optimizar en nivel 2.
damos click derecho en la carpera de Ucos_practica_1 y seleccionamos build project
 
 
en este tiempo ya nuestro programa en Quartus debió haber compilado, asi que programelo sobre la FPGA.
vuelva a eclipse y sobre la carpeta Ucos_practica_1 click derecho:
 
 
se desplegara la siguiente ventana, presione (F8) o de click en:
 
Descargar solución
 
LINKS DE INTERES:
 
https://www.micrium.com/rtos/kernels/
 
http://www.soe.uoguelph.ca/webfiles/engg4420/uCOS-II%20The%20Real-Time%20Kernel.pdf
 
 
 
 
 
Attachments:
Download this file (hello_ucosii.c)hello_ucosii.c[ ]4 kB
Download this file (Ucos.qar)Ucos.qar[ ]331 kB
  Written By Peter Gomez Este contenido esta orientado a los programadores que tienen problema con la conectividad("SGC PmmC") de su pantalla uOled-128-g1/g2…
Written by Sherneyko Plata Rangel   Pynq-z2: Hello world   In this tutorial we will implement a simple test of the inputs/outputs available on…
Objetivos Requerimientos Procedimiento Descripción de Hardware. Qsys. Nios II. UCOS II. Secuencia de Sprite. Sintesis de Audio. Descargas Glosario Otros Resultados. Ejemplo de Sprites.     Objetivos: Diseñar una plantilla general para el diseño de…
Written by Holguer A. Becerra           Requerimientos: DE0-NANO USB-UART(solo para parte 3) Python 2.7 ó superior.   Objetivos: Dar una introducción a los conceptos de Multitasking, Scheduling y…
Written by Holguer A. Becerra             Based on Gregory Estrade's Work.   I have ported the PC Engine System on the DE0-NANO back in 2014, why…
      Arduino tools are generally nice tools for quick prototyping and improvized projects, and the Seeeduino Xiao…
Written by: Holguer A Becerra         En esta practica vamos a construir nuestro primer juego retro  usando un sincronizador de Video VGA…
Written by: Andrea Paola Pabón Ortega & Daniel Enrique Mejia Rueda Revision by: Ing Holguer A. Becerra   DESCRIPCIÓN DEL PROYECTO: El  RTAWD DE0NANO…
  Written by Holguer Andres   Requires: DE0-NANO. 4.3 Inch 480x272 Screen.( WQVGA ) ?️       Parte HW: Descargue la siguiente plantilla( DE0_NANO_TFT_PSP.zip) y descomprimala en una ruta sin espacios y…
Escrito por Guillermo Acevedo   Diseño   En esta practica desarrollaremos un filtro FIR en hardware, para este caso en especifico, realizaremos un filtro…
 Written By Juan David Delgado   FILTRO FIR (FILTRO DE RESPUESTA FINITA AL IMPULSO)     Son conocidos como filtros digitales no recursivos debido a…
XISCKER: Reduced and Complex Instruction Set Computing Key Educational Resources A Configurable Platform for the Emulation of Different Computer Architectures An introduction to Computer Architectures through digital design description for FPGA devices   Computer Architecture embraces all three…
Escrito por: Alix Angarita   En el manual a continuación se explica un método de debug adicional que es muy interesante debido a…
By: Fabio Hernández   INTRODUCCIÓN:   El presente documento pretende mostrar la manera de generar software para una imagen de Linux implementada en la…
Summary Written by Fabio Hernandez   HARD PROCESSOR SYSTEM (HPS)     ------------------------------------------------------------------------------------------------------------------------------------------------   Introducción   Tenemos  2 nuclos de procesamiento ARM cortex-A9, cada uno son su propio cache  se…
Escrito por Jesus Lopez         INTRODUCCIÓN   El acceso directo a memoria (DMA, del inglés direct memory access) permite a cierto tipo de componentes de una computadora acceder a…
    Written by  Sebastian Baquero       Objetivos  Introducción a los conceptos de Multitasking, Scheduling y Context Switching.  Ampliación de los conceptos a cerca de el…