Diferencia entre revisiones de «Toribio»
De Proyecto Butiá
					
										
					
					| m (→USB4ALL:) | |||
| Línea 1: | Línea 1: | ||
| − | + | Toribio[https://github.com/xopxe/Toribio] es un entorno de desarrollo de aplicaciones de robótica para plataformas embebidas. Toribio está construido alrededor de Lumen[https://github.com/xopxe/Lumen], un despachador para programación concurrente cooperativa para Lua. | |
| − | |||
| − | + | == Lumen == | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | Programar en Toribio (y por lo tanto Lumen) consiste en escribir tareas que emiten y reciben señales. Una señal es el mecanismo básico de intercambio de información y sincronización entre tareas. Una señal consiste en un evento y parámetros de tipos arbitrarios. Para esperar una señal se especifica el/los eventos de interes, y opcionalmente una o varias tareas emisoras. Las esperas pueden tener un timeout asociado. | |
| − | |||
| − | |||
| − | + | Un ejemplo de dos tareas, donde una emite una señal periódicamente, y otra lo consume: | |
| − | + | ||
| − | + | ||
| − | + | <syntaxhighlight lang="lua"> | |
| − | + |     local sched=require 'sched' | |
| − | + | ||
| − | + |     -- task emits signals | |
| − | + |     local emitter_task = sched.run(function() | |
| − | + |         for i = 1, 10 do | |
| − | + |             sched.signal('an_event', i) | |
| − | + |              sched.sleep(1) | |
| − | + |         end | |
| − | + |     end) | |
| − | + | ||
| − | + |     -- task receives signals | |
| − | + |     sched.run(function() | |
| − | + |         local waitd = {emitter=emitter_task, events={'an_event'}} | |
| + |         while true do | ||
| + |             local _, _, data = sched.wait(waitd) | ||
| + |             print (data) | ||
| + |         end | ||
| + |     end) | ||
| + | |||
| + |     sched.go() | ||
| </syntaxhighlight> | </syntaxhighlight> | ||
| − | + | ||
| + | |||
| <syntaxhighlight lang="text"> | <syntaxhighlight lang="text"> | ||
| Línea 70: | Línea 56: | ||
|                                                             Lumen task                socket |                                                             Lumen task                socket | ||
| </syntaxhighlight> | </syntaxhighlight> | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
Revisión del 14:25 31 oct 2012
Toribio[1] es un entorno de desarrollo de aplicaciones de robótica para plataformas embebidas. Toribio está construido alrededor de Lumen[2], un despachador para programación concurrente cooperativa para Lua.
Lumen
Programar en Toribio (y por lo tanto Lumen) consiste en escribir tareas que emiten y reciben señales. Una señal es el mecanismo básico de intercambio de información y sincronización entre tareas. Una señal consiste en un evento y parámetros de tipos arbitrarios. Para esperar una señal se especifica el/los eventos de interes, y opcionalmente una o varias tareas emisoras. Las esperas pueden tener un timeout asociado.
Un ejemplo de dos tareas, donde una emite una señal periódicamente, y otra lo consume:
    local sched=require 'sched'
    -- task emits signals
    local emitter_task = sched.run(function()
        for i = 1, 10 do
            sched.signal('an_event', i)
            sched.sleep(1)
        end
    end)
    -- task receives signals
    sched.run(function()
        local waitd = {emitter=emitter_task, events={'an_event'}}
        while true do
            local _, _, data = sched.wait(waitd)
            print (data)
        end
    end)
    sched.go()
                   POSIX            lua library          Lumen tasks
              xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxx
 
                                                                 |---- drivers (lua)
                                                                 |
          fd ---------------- nixio ------------ toribio ------------- drivers (lua)
                               (C)             (lua+Lumen)       |
                                                    |            |---- drivers (lua)
                                                    |
                                                    |
                                                    |---------------butialo, other apps.
                                                    |                                                    
                                                    |---------------bobot-server-----------------userapps
                                                                       (lua)
 
                                                      xxxxxxxxxxxxxxxxxxxxx    xxxxxxxxxxxxxxxxxxxx
                                                           Lumen task                socket
