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.

Reply via email to