Thanks for that! : )
I'm terrible at makefiles : )
On Tuesday, October 15, 2019 at 4:28:06 PM UTC+1, wharms wrote:
>
>
>
> Am 15.10.2019 16:06, schrieb shabaz:
> > Hi Drew,
> >
> > I hope you're well!
> >
> > I recently experimented briefly with both, here' s the steps I used to
> > install Xenomai (Rob Nelson helped me find the pre-built kernel, the
> link
> > to them is below).
> > Not all Xenomai APIs are enabled in the kernel. Anyway, I did get
> reduced
> > jitter when using one of the API sets called Alchemy, which I guess is
> > probably the easiest to code with. In a nutshell you can use the API to
> > create a task thread, and do your low-latency stuff there.
> >
> > For my experiment, I used this content in my makefile:
> >
> > XENO_CONFIG := /usr/xenomai/bin/xeno-config
> >
> > CFLAGS := $(shell $(XENO_CONFIG) --posix --alchemy --cflags)
> > LDFLAGS := $(shell $(XENO_CONFIG) --posix --alchemy --ldflags)
> >
>
> You can simplify your life just use:
>
> atest:
>
> clean:
> rm -f atest
>
>
> the %: %.c stuff is a build in rule CC should be a default
> to you local compiler.
>
> jm2c,
>
> re,
> wh
>
> > CC := gcc
> > EXECUTABLE := atest
> >
> > all: $(EXECUTABLE)
> >
> > %: %.c
> > $(CC) -o $@ $< $(CFLAGS) $(LDFLAGS)
> >
> > clean:
> > rm -f $(EXECUTABLE)
> >
>
>
> > and, code needs to look like this:
> >
> > #include <stdio.h>
> > #include <signal.h>
> > #include <unistd.h>
> > #include <stdlib.h>
> > #include <alchemy/task.h>
> >
> > RT_TASK hello_task;
> >
> > // function to be executed by task
> > // this is your stuff for which you want low jitter
> > void helloWorld(void *arg)
> > {
> > RT_TASK_INFO curtaskinfo;
> > printf("Hello World!\n");
> >
> > // inquire current task
> > rt_task_inquire(NULL,&curtaskinfo);
> >
> > // print task name
> > printf("Task name : %s \n", curtaskinfo.name);
> >
> > while(1)
> > {
> > // do your stuff here in a forever loop if you like
> >
> > // use this sleep command if you need to use any sleep. This sleep
> has
> > low jitter:
> > rt_task_sleep(50000);
> > }
> >
> > }
> >
> > int main(int argc, char* argv[])
> > {
> > char str[10];
> >
> > printf("start task\n");
> > sprintf(str,"hello");
> >
> > /* Create task
> > * Arguments: &task,
> > * name,
> > * stack size (0=default),
> > * priority,
> > * mode (FPU, start suspended, ...)
> > */
> > rt_task_create(&hello_task, str, 0, 99, 0);
> >
> > /* Start task
> > * Arguments: &task,
> > * task function,
> > * function argument
> > */
> > rt_task_start(&hello_task, &helloWorld, 0);
> > while(1)
> > {
> > sleep(10);
> > }
> > }
> >
> > To test latency I ran this:
> > cyclictest -n -p 90 -i 1000
> > and the result was:
> > T: 0 ( 2914) P:90 I:1000 C: 31719 Min: 6 Act: 19 Avg: 18 Max:
>
> > 51
> > which was about ten times lower for the Max value, compared to PREEMPT
> RT.
> > And it was far lower than x86 Linux running a standard kernel with
> Ubuntu.
> > The x86 Linux was a virtual machine on ESXi on an Intel NUC.
> > It was all over the place with that - especially if I tried opening
> another
> > terminal to do something. With Xenomai, it was stable.
> > In summary, provided one is willing to code for Xenomai, then the jitter
> > difference is large - still no-where as good as PRU or a microcontroller
> of
> > course, but fantastic for Linux.
> > Also, it seems that the pre-built Machinekit images use PREMPT RT, not
> > Xenomai : ( I've no idea if Machinekit is coded to support Xenomai, I've
> > not really investigated too far currently.
> >
> > Installing pre-built Xenomi kernel:
> >
> >
> > https://github.com/beagleboard/linux/releases
> >
> >
> >
> > cd /opt/scripts/tools/
> >
> > git pull
> >
> > As root user:
> >
> > ./update_kernel.sh --ti-xenomai-channel --lts-4_14
> >
> >
> >
> > as non-root user:
> >
> > cd development
> >
> > mkdir xenomi
> >
> > cd xenomi
> >
> > wget
> >
> https://xenomai.org/downloads/xenomai/stable/latest/xenomai-3.0.9.tar.bz2
> >
> > bunzip2 xenomai-3.0.9.tar.bz2
> >
> > tar xvf xenomai-3.0.9.tar
> >
> > cd xenomai-3.0.9
> >
> > ./configure --enable-smp CFLAGS="-march=armv7-a -mfpu=vfp3"
> > LDFLAGS="-march=armv7-a -mfpu=vfp3"
> >
> > make
> >
> > As root user:
> >
> > make install
> >
> >
> >
> > Testing it:
> >
> > /usr/xenomai/bin/xeno-test
> >
> >
> >
> >
> >
> >
> > Development/xtest
> >
> > make -f Mafefile-a
> >
> > as root user:
> >
> > export LD_LIBRARY_PATH=/usr/lib:/usr/xenomai/lib
> >
> > ./atest
> >
>
--
For more options, visit http://beagleboard.org/discuss
---
You received this message because you are subscribed to the Google Groups
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/beagleboard/674601c7-69d5-4e3f-8453-e52b9a29ba39%40googlegroups.com.