[Armadeus-commitlog] SF.net SVN: armadeus:[1202] trunk/target/demos/real_time
Brought to you by:
sszy
|
From: <gwe...@us...> - 2009-04-06 15:10:06
|
Revision: 1202
http://armadeus.svn.sourceforge.net/armadeus/?rev=1202&view=rev
Author: gwenhael
Date: 2009-04-06 15:09:50 +0000 (Mon, 06 Apr 2009)
Log Message:
-----------
[DEMOS] global real time improvement
Modified Paths:
--------------
trunk/target/demos/real_time/Makefile.in
trunk/target/demos/real_time/interrupt/linux/kernel/interrupt_linux_kernel.c
trunk/target/demos/real_time/interrupt/linux/user_space/interrupt_linux_us.c
trunk/target/demos/real_time/interrupt/xenomai/kernel/Makefile
trunk/target/demos/real_time/interrupt/xenomai/kernel/interrupt_xeno_kernel.c
trunk/target/demos/real_time/interrupt/xenomai/user_space/Makefile
trunk/target/demos/real_time/interrupt/xenomai/user_space/interrupt_xeno_userspace.c
trunk/target/demos/real_time/pulse/linux/kernel/sleep_kernel/pulse_linux_kernel_sleep.c
trunk/target/demos/real_time/pulse/linux/kernel/timer_kernel/pulse_linux_kernel_timer.c
trunk/target/demos/real_time/pulse/linux/user_space/sleep/pulse_linux_userspace_sleep.c
trunk/target/demos/real_time/pulse/linux/user_space/timer/pulse_linux_userspace_timer.c
trunk/target/demos/real_time/pulse/xenomai/kernel/rt_timer/Makefile
trunk/target/demos/real_time/pulse/xenomai/kernel/rt_timer/pulse_xeno_kernel_rt_timer.c
trunk/target/demos/real_time/pulse/xenomai/kernel/timer_kernel/Makefile
trunk/target/demos/real_time/pulse/xenomai/kernel/timer_kernel/pulse_xeno_kernel_timer.c
trunk/target/demos/real_time/pulse/xenomai/user_space/pulse_sleep/Makefile
trunk/target/demos/real_time/pulse/xenomai/user_space/pulse_sleep/pulse_xeno_userspace_sleep.c
trunk/target/demos/real_time/pulse/xenomai/user_space/pulse_timer/Makefile
trunk/target/demos/real_time/pulse/xenomai/user_space/pulse_timer/pulse_xeno_userspace_timer.c
Added Paths:
-----------
trunk/target/demos/real_time/common.h
trunk/target/demos/real_time/common_kernel.h
Modified: trunk/target/demos/real_time/Makefile.in
===================================================================
--- trunk/target/demos/real_time/Makefile.in 2009-04-06 07:20:11 UTC (rev 1201)
+++ trunk/target/demos/real_time/Makefile.in 2009-04-06 15:09:50 UTC (rev 1202)
@@ -3,32 +3,44 @@
include $(ARMADEUS_BASE_DIR)/Makefile.in
-CC= arm-linux-gcc
-LD= arm-linux-ld
-CXX= arm-linux-g++
-AS= arm-linux-as
-NM= arm-linux-nm
-AR= arm-linux-ar
-SIZE= arm-linux-size
-OBJCOPY= arm-linux-objcopy
+CC= $(ARMADEUS_TOOLCHAIN_PATH)/arm-linux-gcc
+LD= $(ARMADEUS_TOOLCHAIN_PATH)/arm-linux-ld
+CXX= $(ARMADEUS_TOOLCHAIN_PATH)/arm-linux-g++
+AS= $(ARMADEUS_TOOLCHAIN_PATH)/arm-linux-as
+NM= $(ARMADEUS_TOOLCHAIN_PATH)/arm-linux-nm
+AR= $(ARMADEUS_TOOLCHAIN_PATH)/arm-linux-ar
+SIZE= $(ARMADEUS_TOOLCHAIN_PATH)/arm-linux-size
+OBJCOPY= $(ARMADEUS_TOOLCHAIN_PATH)/arm-linux-objcopy
-
EXEC=$(APPLICATIONS)
-XENO=$(ARMADEUS_ROOTFS_DIR)/usr/xenomai
-XENOCONFIG=$(shell PATH=$(XENO):$(XENO)/bin:$(PATH) which xeno-config 2>/dev/null)
ifneq ($(APPLICATIONS),)
SRC= $(wildcard *.c)
OBJ= $(SRC:.c=.o)
EXEC= $(APPLICATIONS)
+CFLAGS=-g -W -Wall -D_GNU_SOURCE -D_REENTRANT
+LDFLAGS=-lpthread
+ifeq ($(XENOMAI),y)
XENO=$(ARMADEUS_ROOTFS_DIR)/usr/xenomai
-CFLAGS=-g -W -Wall -I$(XENO)/include -I$(XENO)/include/native -I$(XENO)/include/rtdm -D_GNU_SOURCE -D_REENTRANT
-LDFLAGS=-L$(XENO)/lib -Xlinker -rpath $(XENO)/lib -Xlinker $(XENO)/lib/libnative.a $(XENO)/lib/librtdm.a -lpthread -lnative -lrtdm
+CFLAGS+=-I$(XENO)/include -I$(XENO)/include/native -I$(XENO)/include/rtdm
+LDFLAGS+=-L$(XENO)/lib -Xlinker -rpath $(XENO)/lib -Xlinker $(XENO)/lib/libnative.a $(XENO)/lib/librtdm.a -lnative -lrtdm
+endif
+
$(EXEC) : $(OBJ)
$(CC) -o $@ $^ $(LDFLAGS)
$(OBJ): $(SRC)
$(CC) $(CFLAGS) -o $@ -c $<
+.PHONY: install
+ifeq ($(XENOMAI),y)
+install: $(EXEC)
+ mkdir -p $(DEST_DIR)/$(EXEC)
+ cp $(EXEC) $(DEST_DIR)/$(EXEC)
+ echo "$(EXEC):native:!./$(EXEC);popall:control_c" > /$(DEST_DIR)/$(EXEC)/.runinfo
+else
+install: $(EXEC)
+ cp $(EXEC) $(DEST_DIR)/$(EXEC)
endif
+endif
ifneq ($(MODULES),)
EXEC=$(MODULES).ko
@@ -41,10 +53,12 @@
obj-m := $(OBJ)
CLEAN_MOD= modules.order *.ko *.mod.c *.mod.o *.symvers $(CLEANMOD) .tmp_versions
-$(EXEC):
+$(EXEC): $(MODULES).c
$(MAKE) -C $(KSRC) SUBDIRS=$(PWD) modules
-
+.PHONY: install
+install: $(EXEC)
+ cp $(EXEC) $(DEST_DIR)/$(EXEC)
endif
.PHONY: all
all: $(EXEC)
@@ -53,11 +67,8 @@
rm -rf $(OBJ) $(CLEAN_MOD)
rm -f $(EXEC)
rm -f *.c~ *.h~ Makefile~
-.PHONY: install
-install: $(EXEC)
- cp $(EXEC) $(DEST_DIR)/$(EXEC)
.PHONY: mrproper
mrproper: clean
- rm -f $(DEST_DIR)/$(EXEC)
+ rm -rf $(DEST_DIR)/$(EXEC)
Added: trunk/target/demos/real_time/common.h
===================================================================
--- trunk/target/demos/real_time/common.h (rev 0)
+++ trunk/target/demos/real_time/common.h 2009-04-06 15:09:50 UTC (rev 1202)
@@ -0,0 +1,17 @@
+#ifndef COMMON_H
+#define COMMON_H
+
+#define INTERRUPT_OUTPUT_PORT 9
+#define INTERRUPT_INPUT_PORT 6
+#define INTERRUPT_OUTPUT_DEV "/dev/gpio/PA9"
+#define INTERRUPT_INPUT_DEV "/dev/gpio/PA6"
+
+#define PULSE_OUTPUT_DEV "/dev/gpio/PA4"
+#define PULSE_OUTPUT_PORT 4
+
+#define TIMESLEEP 10000
+#define TASK_PRIO 99 /* Highest RT priority */
+#define TASK_MODE 0 /* No flags */
+#define TASK_STKSZ 0 /* Stack size (use default one) */
+
+#endif /* COMMON_H */
Added: trunk/target/demos/real_time/common_kernel.h
===================================================================
--- trunk/target/demos/real_time/common_kernel.h (rev 0)
+++ trunk/target/demos/real_time/common_kernel.h 2009-04-06 15:09:50 UTC (rev 1202)
@@ -0,0 +1,8 @@
+#ifndef COMMON_KERNEL_H
+#define COMMON_KERNEL_H
+#include <asm/gpio.h>
+#include "common.h"
+
+#define INTERRUPT_INPUT_NB IRQ_GPIOA(INTERRUPT_INPUT_PORT)
+
+#endif /* COMMON_KERNEL_H */
Modified: trunk/target/demos/real_time/interrupt/linux/kernel/interrupt_linux_kernel.c
===================================================================
--- trunk/target/demos/real_time/interrupt/linux/kernel/interrupt_linux_kernel.c 2009-04-06 07:20:11 UTC (rev 1201)
+++ trunk/target/demos/real_time/interrupt/linux/kernel/interrupt_linux_kernel.c 2009-04-06 15:09:50 UTC (rev 1202)
@@ -26,21 +26,20 @@
#include <linux/init.h>
#include <linux/interrupt.h>
#include <asm/gpio.h>
+#include "../../../common_kernel.h"
-
-#define IRQ_NB IRQ_GPIOA(6)
-
MODULE_AUTHOR("Gwenhael GOAVEC MEROU");
MODULE_DESCRIPTION("irq kernel test");
MODULE_SUPPORTED_DEVICE("none");
MODULE_LICENSE("GPL");
+static int iomask = 0x00;
/* irq handler */
static irqreturn_t test_interrupt_handler(int irqn, void *dev)
{
- printk("IT !\n");
-
+ imx_gpio_set_value(INTERRUPT_OUTPUT_PORT, iomask);
+ iomask^=1;
return IRQ_HANDLED;
}
@@ -48,19 +47,19 @@
{
int err;
- err = request_irq(IRQ_NB, test_interrupt_handler, 0, "test irq", NULL);
+ err = request_irq(INTERRUPT_INPUT_NB, test_interrupt_handler, 0, "test irq", NULL);
if (err) {
- printk(KERN_INFO "Error while requesting IRQ %d\n", IRQ_NB);
+ printk(KERN_INFO "Error while requesting IRQ %d\n", INTERRUPT_INPUT_NB);
return err;
}
- set_irq_type(IRQ_NB, IRQF_TRIGGER_FALLING);
+ set_irq_type(INTERRUPT_INPUT_NB, IRQF_TRIGGER_FALLING);
return 0;
}
static void __exit test_irq_exit(void)
{
- free_irq(IRQ_NB, NULL);
+ free_irq(INTERRUPT_INPUT_NB, NULL);
}
module_init(test_irq_init);
Modified: trunk/target/demos/real_time/interrupt/linux/user_space/interrupt_linux_us.c
===================================================================
--- trunk/target/demos/real_time/interrupt/linux/user_space/interrupt_linux_us.c 2009-04-06 07:20:11 UTC (rev 1201)
+++ trunk/target/demos/real_time/interrupt/linux/user_space/interrupt_linux_us.c 2009-04-06 15:09:50 UTC (rev 1202)
@@ -28,47 +28,42 @@
#include <fcntl.h>
#include <signal.h>
#include <unistd.h>
+#include "../../../common.h"
-
-#define FALSE 0
-#define TRUE 1
-volatile int STOP=FALSE;
-int wait_flag=TRUE;
-void
-action (int signo, siginfo_t * si, void *data)
+int main (int argc, char **argv)
{
- printf (" -------------- Got the %d signal ------------\n", signo);
-}
+ int fd_input,fd_output, retval = 0, iomask=0x00;
-int
-main (int argc, char **argv)
-{
- int fd, res, oflags, retval = 0;
- unsigned int buffer;
-char buf[255];
+ // Open gpio file device for communication;
+ fd_input = open (INTERRUPT_INPUT_DEV, O_RDONLY);
+ if (fd_input < 0) {
+ printf ("Open Failed : %s\n",INTERRUPT_INPUT_DEV);
+ exit (EXIT_FAILURE);
+ }
+ fd_output = open(INTERRUPT_OUTPUT_DEV, O_RDWR);
+ if (fd_output < 0) {
+ printf("Open Failed : %s\n",INTERRUPT_OUTPUT_DEV);
+ exit (EXIT_FAILURE);
+ }
- // Open gpio file device for communication;
- fd = open ("/dev/gpio/PA6", O_RDONLY);
- if (fd < 0)
- {
- printf ("Open Failed\n");
- exit (EXIT_FAILURE);
- }
-
- // set this process as owner of device file
- retval = fcntl (fd, F_SETOWN, getpid ());
- if (retval < 0)
- {
- printf ("F_SETOWN fails \n");
- }
- while (STOP == FALSE)
- {
- usleep (100000);
- res = read (fd, buf, 255);
- printf(".\n");
- buf[res] = 0;
- printf ("%d:%x:%d\n", (int)buf[6],buf, res);
- }
- close (fd);
- exit (EXIT_SUCCESS);
+ // set this process as owner of device file
+ retval = fcntl (fd_input, F_SETOWN, getpid ());
+ if (retval < 0) {
+ printf ("F_SETOWN fails \n");
+ return EXIT_FAILURE;
+ }
+ retval = fcntl(fd_output, F_SETOWN, getpid());
+ if (retval < 0) {
+ printf("F_SETOWN fails for %s\n",INTERRUPT_OUTPUT_DEV);
+ return EXIT_FAILURE;
+ }
+ char c;
+ while (1) {
+ read (fd_input, &c, 1);
+ write(fd_output, &iomask,sizeof(iomask));
+ iomask ^=1;// (iomask == 0x00)?0x01:0x00;
+ }
+ close (fd_input);
+ close (fd_output);
+ exit (EXIT_SUCCESS);
}
Modified: trunk/target/demos/real_time/interrupt/xenomai/kernel/Makefile
===================================================================
--- trunk/target/demos/real_time/interrupt/xenomai/kernel/Makefile 2009-04-06 07:20:11 UTC (rev 1201)
+++ trunk/target/demos/real_time/interrupt/xenomai/kernel/Makefile 2009-04-06 15:09:50 UTC (rev 1202)
@@ -1,5 +1,6 @@
### List of modules to be build
MODULES= interrupt_xeno_kernel
+XENOMAI=y
ifneq ($(KERNELRELEASE),)
EXTRA_CFLAGS := -I./include/xenomai -I./include/xenomai/posix -I./include/xenomai/native
Modified: trunk/target/demos/real_time/interrupt/xenomai/kernel/interrupt_xeno_kernel.c
===================================================================
--- trunk/target/demos/real_time/interrupt/xenomai/kernel/interrupt_xeno_kernel.c 2009-04-06 07:20:11 UTC (rev 1201)
+++ trunk/target/demos/real_time/interrupt/xenomai/kernel/interrupt_xeno_kernel.c 2009-04-06 15:09:50 UTC (rev 1202)
@@ -27,41 +27,39 @@
#include <rtdm/rtdm_driver.h>
#include <mach/hardware.h>
#include <native/intr.h>
+#include "../../../common_kernel.h"
-
MODULE_LICENSE("GPL");
-#define IRQ_NUMBER 70 /* Intercept interrupt on portA6 */
-#define TASK_PRIO 99 /* Highest RT priority */
-#define TASK_MODE 0 /* No flags */
-#define TASK_STKSZ 0 /* Stack size (use default one) */
+static RT_INTR intr_desc;
+static int iomask;
-RT_INTR intr_desc;
-
-static int irq_server (xnintr_t *intr) {
- printk("IT !\n");
+static int irq_server (xnintr_t *intr)
+{
+ imx_gpio_set_value(INTERRUPT_OUTPUT_PORT, iomask);
+ iomask^=1;
return RT_INTR_HANDLED;
}
-static int __init irq_init(void) {
+static int __init irq_init(void)
+{
int err;
-
+ iomask = 0x00;
/* Version With 6 param only on kernel space */
- err = rt_intr_create(&intr_desc,"MyIrq", IRQ_NUMBER, irq_server, NULL, 0);
+ err = rt_intr_create(&intr_desc,"MyIrq", INTERRUPT_INPUT_NB, irq_server, NULL, 0);
if (err !=0){
printk("rt_intr_create : error\n");
return err;
}
err = rt_intr_enable(&intr_desc);
- if (err != 0)
- printk("rt_intr_enable : error\n");
- else
+ if (err == 0)
printk("rt_intr_create : ok\n");
return err;
}
-void __init irq_exit(void) {
+void __exit irq_exit(void)
+{
rt_intr_delete(&intr_desc);
}
Modified: trunk/target/demos/real_time/interrupt/xenomai/user_space/Makefile
===================================================================
--- trunk/target/demos/real_time/interrupt/xenomai/user_space/Makefile 2009-04-06 07:20:11 UTC (rev 1201)
+++ trunk/target/demos/real_time/interrupt/xenomai/user_space/Makefile 2009-04-06 15:09:50 UTC (rev 1202)
@@ -1,5 +1,6 @@
### List of applications to be build
APPLICATIONS = interrupt_xeno_userspace
+XENOMAI=y
### Set of compilation instructions
ARMADEUS_BASE_DIR=../../../../../..
include $(ARMADEUS_BASE_DIR)/target/demos/real_time/Makefile.in
Modified: trunk/target/demos/real_time/interrupt/xenomai/user_space/interrupt_xeno_userspace.c
===================================================================
--- trunk/target/demos/real_time/interrupt/xenomai/user_space/interrupt_xeno_userspace.c 2009-04-06 07:20:11 UTC (rev 1201)
+++ trunk/target/demos/real_time/interrupt/xenomai/user_space/interrupt_xeno_userspace.c 2009-04-06 15:09:50 UTC (rev 1202)
@@ -24,63 +24,62 @@
#include <sys/mman.h>
#include <native/task.h>
#include <native/intr.h>
+#include "../../../common.h"
-#define IRQ_NUMBER 70 /* Intercept interrupt on PA6 */
-#define TASK_PRIO 99 /* Highest RT priority */
-#define TASK_MODE 0 /* No flags */
-#define TASK_STKSZ 0 /* Stack size (use default one) */
-
RT_INTR intr_desc;
RT_TASK server_desc;
void cleanup(void);
void irq_server (void *cookie) {
- int err;
- if (rt_intr_enable(&intr_desc) != 0) {
- printf("erreur pour enable\n");
- return;
- }
- for (;;) {
- /* Wait for the next interrupt on channel 70. */
- err = rt_intr_wait(&intr_desc,TM_INFINITE);
- printf("tata plop\n");
- if (err > 0) {
- printf("interrupt retrouvee %d\n",err);
- }
- }
+ int fd ,iomask=0x00;
+ if (rt_intr_enable(&intr_desc) != 0) {
+ printf("Error : enabling IT\n");
+ return;
+ }
+ if ((fd = open(INTERRUPT_OUTPUT_DEV, O_RDWR))<0) {
+ printf("Open error on /dev/gpio/portD\n");
+ return;
+ }
+
+ for (;;) {
+ /* Wait for the next interrupt. */
+ if (rt_intr_wait(&intr_desc,TM_INFINITE) > 0) {
+ write(fd,&iomask,sizeof(iomask));
+ iomask^=1;
+ }
+ }
}
int main (int argc, char *argv[]) {
- int err;
+ int err;
+
+ mlockall(MCL_CURRENT|MCL_FUTURE);
- mlockall(MCL_CURRENT|MCL_FUTURE);
-
- /* Version With 4 param only on userSpace */
- err = rt_intr_create(&intr_desc,"MyIrq",IRQ_NUMBER,0);
- if (err != 0){
- printf("rt_intr_create : error\n");
- return 1;
- } else
- printf("rt_intr_create : ok\n");
-
- err = rt_task_create(&server_desc,
- "MyIrqServer",
- TASK_STKSZ,
- TASK_PRIO,
- TASK_MODE);
- if (err == 0)
- rt_task_start(&server_desc,&irq_server,NULL);
- else{
- printf("rt_task_start : error\n");
- return 1;
- }
- getchar();
- cleanup();
- return 0;
+ /* Version With 4 param only on userSpace */
+ err = rt_intr_create(&intr_desc,"MyIrq",70,0);
+ if (err != 0){
+ printf("rt_intr_create : error\n");
+ return 1;
+ }
+
+ err = rt_task_create(&server_desc,
+ "MyIrqServer",
+ TASK_STKSZ,
+ TASK_PRIO,
+ TASK_MODE);
+ if (err == 0)
+ rt_task_start(&server_desc,&irq_server,NULL);
+ else{
+ printf("rt_task_start : error\n");
+ return 1;
+ }
+ getchar();
+ cleanup();
+ return 0;
}
void cleanup (void) {
- rt_intr_delete(&intr_desc);
- rt_task_delete(&server_desc);
+ rt_intr_delete(&intr_desc);
+ rt_task_delete(&server_desc);
}
Modified: trunk/target/demos/real_time/pulse/linux/kernel/sleep_kernel/pulse_linux_kernel_sleep.c
===================================================================
--- trunk/target/demos/real_time/pulse/linux/kernel/sleep_kernel/pulse_linux_kernel_sleep.c 2009-04-06 07:20:11 UTC (rev 1201)
+++ trunk/target/demos/real_time/pulse/linux/kernel/sleep_kernel/pulse_linux_kernel_sleep.c 2009-04-06 15:09:50 UTC (rev 1202)
@@ -28,10 +28,8 @@
#include <linux/delay.h>
#include <linux/timer.h>
#include <asm/gpio.h>
+#include "../../../../common_kernel.h"
-#define TIMESLEEP 10
-#define MINOR_PORT 4
-
MODULE_AUTHOR("Gwenhael GOAVEC MEROU");
MODULE_DESCRIPTION("sleep kernel test");
MODULE_SUPPORTED_DEVICE("none");
@@ -42,10 +40,11 @@
/* thread fonction */
int fct_thread_sleep(void *data) {
int iomask=1;
+ int timesleep = TIMESLEEP/1000;
do {
- imx_gpio_set_value(MINOR_PORT, iomask);
- iomask^=1;
- msleep(TIMESLEEP);
+ imx_gpio_set_value(PULSE_OUTPUT_PORT, iomask);
+ iomask^=1;
+ msleep(timesleep);
}while (!kthread_should_stop());
return 0;
}
@@ -59,7 +58,7 @@
/* unloading (rmmod) */
-static void __init blink_exit(void) {
+static void __exit blink_exit(void) {
printk(KERN_INFO "blink_exit\n");
kthread_stop(th);
}
Modified: trunk/target/demos/real_time/pulse/linux/kernel/timer_kernel/pulse_linux_kernel_timer.c
===================================================================
--- trunk/target/demos/real_time/pulse/linux/kernel/timer_kernel/pulse_linux_kernel_timer.c 2009-04-06 07:20:11 UTC (rev 1201)
+++ trunk/target/demos/real_time/pulse/linux/kernel/timer_kernel/pulse_linux_kernel_timer.c 2009-04-06 15:09:50 UTC (rev 1202)
@@ -29,10 +29,8 @@
#include <linux/delay.h>
#include <linux/timer.h>
#include <asm/gpio.h>
+#include "../../../../common_kernel.h"
-#define TIMESLEEP HZ/100
-#define MINOR_PORT 4
-
MODULE_AUTHOR("Gwenhael GOAVEC MEROU");
MODULE_DESCRIPTION("sleep kernel test");
MODULE_SUPPORTED_DEVICE("none");
@@ -40,12 +38,12 @@
static int iomask = 0x00;
static struct timer_list mt;
-
+#define TS HZ/100
/* timer callback*/
void fonctionTimer(unsigned long arg) {
- imx_gpio_set_value(MINOR_PORT, iomask);
+ imx_gpio_set_value(PULSE_OUTPUT_PORT, iomask);
iomask^=1;
- mt.expires = jiffies+TIMESLEEP;
+ mt.expires = jiffies+TS;
add_timer(&mt);
}
@@ -53,16 +51,17 @@
static int __init blink_init(void) {
current->state = TASK_INTERRUPTIBLE;
init_timer(&mt);
- mt.expires = jiffies + TIMESLEEP;
+ mt.expires = jiffies + TS;
mt.data = (unsigned long) current;
mt.function = fonctionTimer;
add_timer(&mt);
+
printk(KERN_INFO "blink_init\n");
return 0;
}
/* unloading (rmmod) */
-static void __init blink_exit(void) {
+static void __exit blink_exit(void) {
printk(KERN_INFO "blink_exit\n");
del_timer(&mt);
}
Modified: trunk/target/demos/real_time/pulse/linux/user_space/sleep/pulse_linux_userspace_sleep.c
===================================================================
--- trunk/target/demos/real_time/pulse/linux/user_space/sleep/pulse_linux_userspace_sleep.c 2009-04-06 07:20:11 UTC (rev 1201)
+++ trunk/target/demos/real_time/pulse/linux/user_space/sleep/pulse_linux_userspace_sleep.c 2009-04-06 15:09:50 UTC (rev 1202)
@@ -28,22 +28,22 @@
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
+#include "../../../../common.h"
int main(int argc, char **argv) {
-
- int fd;
- int iomask;
- if ((fd = open("/dev/gpio/PA4", O_RDWR))<0) {
- printf("Open error on /dev/gpio/PA4\n");
- exit(0);
- }
- iomask=0x00;
- printf("Opened on /dev/gpio/PA4\n");
- while(1){
- iomask^=1;
- write(fd,&iomask,sizeof(iomask));
- usleep(10000);
- }
- close(fd);
- exit(0);
+ int fd, iomask;
+ if ((fd = open(PULSE_OUTPUT_DEV, O_RDWR))<0) {
+ printf("Open error on %s\n",PULSE_OUTPUT_DEV);
+ exit(0);
+ }
+ iomask=0x00;
+ printf("Opened on %s\n",PULSE_OUTPUT_DEV);
+
+ while(1){
+ iomask^=1;
+ write(fd,&iomask,sizeof(iomask));
+ usleep(TIMESLEEP);
+ }
+ close(fd);
+ exit(0);
}
Modified: trunk/target/demos/real_time/pulse/linux/user_space/timer/pulse_linux_userspace_timer.c
===================================================================
--- trunk/target/demos/real_time/pulse/linux/user_space/timer/pulse_linux_userspace_timer.c 2009-04-06 07:20:11 UTC (rev 1201)
+++ trunk/target/demos/real_time/pulse/linux/user_space/timer/pulse_linux_userspace_timer.c 2009-04-06 15:09:50 UTC (rev 1202)
@@ -23,34 +23,45 @@
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <signal.h>
#include <sys/types.h>
+#include <sys/time.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
+#include "../../../../common.h"
+int fd;
+int iomask=0x00;
-#define TIMESLEEP 1
-#define PORT "/dev/gpio/PA4"
-
-int fd;
-int iomask;
-void test() {
- printf("hello world\n");
+void test(int signum) {
write(fd, &iomask, sizeof(iomask));
iomask ^=1;
}
int main(int argc, char **argv) {
- fd = open(PORT,O_RDWR);
+ struct sigaction sa;
+ struct itimerval timer;
+
+ fd = open(PULSE_OUTPUT_DEV,O_RDWR);
if (fd < 0) {
printf("open : error\n");
return 1;
}
- iomask = 1;
- do {
- signal(SIGALRM,test);
- alarm(TIMESLEEP);
- pause();
- } while(1);
+
+ /* Install test as the signal handler for SIGVTALRM */
+ memset(&sa, 0,sizeof(sa));
+ sa.sa_handler = &test;
+ sigaction(SIGVTALRM,&sa, NULL);
+ /* Configure the timer to expire after TIMESLEEP msec ... */
+ timer.it_value.tv_sec = 0;
+ timer.it_value.tv_usec = TIMESLEEP;
+ /* ... and every TIMESLEEP msec after that. */
+ timer.it_interval.tv_sec = 0;
+ timer.it_interval.tv_usec = TIMESLEEP;
+ /* Start a virtual timer. It counts down whenever this process is
+ * executing */
+ setitimer(ITIMER_VIRTUAL, &timer, NULL);
+ while(1);
return 0;
}
Modified: trunk/target/demos/real_time/pulse/xenomai/kernel/rt_timer/Makefile
===================================================================
--- trunk/target/demos/real_time/pulse/xenomai/kernel/rt_timer/Makefile 2009-04-06 07:20:11 UTC (rev 1201)
+++ trunk/target/demos/real_time/pulse/xenomai/kernel/rt_timer/Makefile 2009-04-06 15:09:50 UTC (rev 1202)
@@ -1,6 +1,6 @@
### List of modules to be build
MODULES = pulse_xeno_kernel_rt_timer
-
+XENOMAI=y
ifneq ($(KERNELRELEASE),)
EXTRA_CFLAGS := -I./include/xenomai -I./include/xenomai/posix -I./include/xenomai/native
obj-m := $(MODULES).o
Modified: trunk/target/demos/real_time/pulse/xenomai/kernel/rt_timer/pulse_xeno_kernel_rt_timer.c
===================================================================
--- trunk/target/demos/real_time/pulse/xenomai/kernel/rt_timer/pulse_xeno_kernel_rt_timer.c 2009-04-06 07:20:11 UTC (rev 1201)
+++ trunk/target/demos/real_time/pulse/xenomai/kernel/rt_timer/pulse_xeno_kernel_rt_timer.c 2009-04-06 15:09:50 UTC (rev 1202)
@@ -28,30 +28,24 @@
#include <mach/hardware.h>
#include <nucleus/types.h>
#include <asm/gpio.h>
+#include "../../../../common_kernel.h"
MODULE_LICENSE("GPL");
RT_TASK blink_task;
static int end = 0;
-#define TIMESLEEP 10000000llu
-#define MINOR_PORT 4
-#define GPIOWRDIRECTION _IOW(PP_IOCTL, 0xF1, int)
-#define MXC_DR(x) (0x1c + ((x) << 8))
-#define VA_GPIO_BASE IO_ADDRESS(IMX_GPIO_BASE)
-#define PORT_ADDR VA_GPIO_BASE + MXC_DR(0)
-
void blink(void *arg){
int err, iomask;
- printk(KERN_INFO "entrering blink\n");
+ printk(KERN_INFO "entering blink\n");
- if (imx_gpio_request(GPIO_PORTA | MINOR_PORT, "blink") < 0) {
- gpio_free(MINOR_PORT);
+ if (imx_gpio_request(PULSE_OUTPUT_PORT, "blink") < 0) {
+ gpio_free(PULSE_OUTPUT_PORT);
return ;
}
- imx_gpio_direction_output(GPIO_PORTA | MINOR_PORT,1);
+ imx_gpio_direction_output(PULSE_OUTPUT_PORT,1);
- if ((err = rt_task_set_periodic(NULL, TM_NOW,rt_timer_ns2ticks(TIMESLEEP)))){
+ if ((err = rt_task_set_periodic(NULL, TM_NOW,rt_timer_ns2ticks(TIMESLEEP*1000)))){
printk("rt task set periodic failed \n");
return;
}
@@ -59,7 +53,7 @@
while(!end){
rt_task_wait_period(NULL);
- imx_gpio_set_value(GPIO_PORTA | MINOR_PORT, iomask);
+ imx_gpio_set_value(PULSE_OUTPUT_PORT, iomask);
iomask^=1;
}
printk("end\n");
@@ -80,12 +74,12 @@
}
/* unloading (rmmod) */
-static void __init blink_exit(void) {
+static void __exit blink_exit(void) {
end = 1;
printk(KERN_INFO "blink_exit\n");
rt_task_delete(&blink_task);
rt_timer_stop();
- gpio_free(MINOR_PORT);
+ gpio_free(PULSE_OUTPUT_PORT);
}
/* API kernel driver */
Modified: trunk/target/demos/real_time/pulse/xenomai/kernel/timer_kernel/Makefile
===================================================================
--- trunk/target/demos/real_time/pulse/xenomai/kernel/timer_kernel/Makefile 2009-04-06 07:20:11 UTC (rev 1201)
+++ trunk/target/demos/real_time/pulse/xenomai/kernel/timer_kernel/Makefile 2009-04-06 15:09:50 UTC (rev 1202)
@@ -1,6 +1,6 @@
### List of modules to be build
MODULES = pulse_xeno_kernel_timer
-
+XENOMAI=y
ifneq ($(KERNELRELEASE),)
EXTRA_CFLAGS := -I./include/xenomai -I./include/xenomai/posix -I./include/xenomai/native
obj-m := $(MODULES).o
Modified: trunk/target/demos/real_time/pulse/xenomai/kernel/timer_kernel/pulse_xeno_kernel_timer.c
===================================================================
--- trunk/target/demos/real_time/pulse/xenomai/kernel/timer_kernel/pulse_xeno_kernel_timer.c 2009-04-06 07:20:11 UTC (rev 1201)
+++ trunk/target/demos/real_time/pulse/xenomai/kernel/timer_kernel/pulse_xeno_kernel_timer.c 2009-04-06 15:09:50 UTC (rev 1202)
@@ -28,26 +28,20 @@
#include <rtdm/rtdm_driver.h>
#include <mach/hardware.h>
#include <asm/gpio.h>
+#include "../../../../common_kernel.h"
MODULE_LICENSE("GPL");
static rtdm_task_t blink_task;
-static int end = 0;
+static int volatile end = 0;
-#define TIMESLEEP 5000000
-#define MINOR_PORT 4
-#define GPIOWRDIRECTION _IOW(PP_IOCTL, 0xF1, int)
-#define MXC_DR(x) (0x1c + ((x) << 8))
-#define VA_GPIO_BASE IO_ADDRESS(IMX_GPIO_BASE)
-#define PORT_ADDR VA_GPIO_BASE + MXC_DR(0)
-
void blink(void *arg){
int iomask;
- printk(KERN_INFO "entrering blink\n");
+ printk(KERN_INFO "entering blink\n");
iomask=0;
while(!end){
rtdm_task_wait_period();
- gpio_set_value(MINOR_PORT, iomask);
+ gpio_set_value(PULSE_OUTPUT_PORT, iomask);
iomask^=1;
}
printk("end\n");
@@ -56,21 +50,21 @@
/* module load (insmod) */
static int __init blink_init(void) {
printk(KERN_INFO "blink_init\n");
- if (gpio_request(MINOR_PORT, "blink") < 0) {
- gpio_free(MINOR_PORT);
+ if (gpio_request(PULSE_OUTPUT_PORT, "blink") < 0) {
+ gpio_free(PULSE_OUTPUT_PORT);
return -EBUSY;
}
- gpio_direction_output(MINOR_PORT,1);
+ gpio_direction_output(PULSE_OUTPUT_PORT,1);
return rtdm_task_init(&blink_task, "blink", blink, NULL,
- 99, TIMESLEEP);
+ 99, TIMESLEEP*1000);
}
/* module unload (rmmod) */
-static void __init blink_exit(void) {
+static void __exit blink_exit(void) {
end = 1;
printk(KERN_INFO "blink_exit\n");
- rtdm_task_join_nrt(&blink_task,100);
- gpio_free(MINOR_PORT);
+ rtdm_task_join_nrt(&blink_task,1000);
+ gpio_free(PULSE_OUTPUT_PORT);
}
/* API kernel driver */
Modified: trunk/target/demos/real_time/pulse/xenomai/user_space/pulse_sleep/Makefile
===================================================================
--- trunk/target/demos/real_time/pulse/xenomai/user_space/pulse_sleep/Makefile 2009-04-06 07:20:11 UTC (rev 1201)
+++ trunk/target/demos/real_time/pulse/xenomai/user_space/pulse_sleep/Makefile 2009-04-06 15:09:50 UTC (rev 1202)
@@ -1,5 +1,6 @@
### List of applications to be build
-APPLICATIONS = pulse_xeno_userspace_timer
+APPLICATIONS = pulse_xeno_userspace_sleep
+XENOMAI=y
ARMADEUS_BASE_DIR=../../../../../../..
include $(ARMADEUS_BASE_DIR)/target/demos/real_time/Makefile.in
Modified: trunk/target/demos/real_time/pulse/xenomai/user_space/pulse_sleep/pulse_xeno_userspace_sleep.c
===================================================================
--- trunk/target/demos/real_time/pulse/xenomai/user_space/pulse_sleep/pulse_xeno_userspace_sleep.c 2009-04-06 07:20:11 UTC (rev 1201)
+++ trunk/target/demos/real_time/pulse/xenomai/user_space/pulse_sleep/pulse_xeno_userspace_sleep.c 2009-04-06 15:09:50 UTC (rev 1202)
@@ -21,29 +21,16 @@
*
*/
-#include <stdio.h>
-#include <stdlib.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/ioctl.h>
-#include <linux/ppdev.h>
#include <signal.h>
-#include <sys/mman.h>
#include <native/task.h>
#include <native/timer.h>
#include <rtdm/rtdm.h>
+#include "../../../../common.h"
RT_TASK blink_task;
int write_fd = -1;
-#define TIMESLEEP 10000000
-#define WRITE_FILE "gpio/PA4"
-
-#define GPIOWRDIRECTION _IOW(PP_IOCTL, 0xF1, int)
-
void blink(void *arg){
int iomask;
struct timespec tim = {0,TIMESLEEP};
@@ -51,7 +38,7 @@
iomask=0x00;
while(1){
- rt_dev_write(write_fd,&iomask,sizeof(iomask));
+ write(write_fd,&iomask,sizeof(iomask));
iomask^=1;
if (nanosleep(&tim,NULL) != 0) {
printf("erreur de usleep\n");
@@ -74,8 +61,8 @@
/* Ouverture du descripteur de fichier */
- if ((write_fd = rt_dev_open(WRITE_FILE, 0)) < 0) {
- printf("Cannot open /dev/%s\n",WRITE_FILE);
+ if ((write_fd = open(PULSE_OUTPUT_DEV, O_WRONLY)) < 0) {
+ printf("Cannot open /dev/%s\n",PULSE_OUTPUT_DEV);
return 1;
}
Modified: trunk/target/demos/real_time/pulse/xenomai/user_space/pulse_timer/Makefile
===================================================================
--- trunk/target/demos/real_time/pulse/xenomai/user_space/pulse_timer/Makefile 2009-04-06 07:20:11 UTC (rev 1201)
+++ trunk/target/demos/real_time/pulse/xenomai/user_space/pulse_timer/Makefile 2009-04-06 15:09:50 UTC (rev 1202)
@@ -1,5 +1,6 @@
### List of applications to be build
APPLICATIONS = pulse_xeno_userspace_timer
+XENOMAI=y
ARMADEUS_BASE_DIR=../../../../../../..
include $(ARMADEUS_BASE_DIR)/target/demos/real_time/Makefile.in
Modified: trunk/target/demos/real_time/pulse/xenomai/user_space/pulse_timer/pulse_xeno_userspace_timer.c
===================================================================
--- trunk/target/demos/real_time/pulse/xenomai/user_space/pulse_timer/pulse_xeno_userspace_timer.c 2009-04-06 07:20:11 UTC (rev 1201)
+++ trunk/target/demos/real_time/pulse/xenomai/user_space/pulse_timer/pulse_xeno_userspace_timer.c 2009-04-06 15:09:50 UTC (rev 1202)
@@ -28,29 +28,24 @@
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
-#include <linux/ppdev.h>
#include <signal.h>
#include <sys/mman.h>
#include <native/task.h>
#include <native/timer.h>
+#include "../../../../common.h"
RT_TASK blink_task;
-#define TIMESLEEP 10000000
-#define GPIOWRDIRECTION _IOW(PP_IOCTL, 0xF1, int)
-
-/* Revoir en se basant sur cross-link.c */
-
void blink(void *arg){
int fd, iomask;
- if ((fd = open("/dev/gpio/PA4", O_RDWR))<0) {
- printf("Open error on /dev/gpio/portD\n");
+ if ((fd = open(PULSE_OUTPUT_DEV, O_RDWR))<0) {
+ printf("Open error on %s\n",PULSE_OUTPUT_DEV);
exit(0);
}
iomask=0x00;
- rt_task_set_periodic(NULL, TM_NOW, TIMESLEEP);
+ rt_task_set_periodic(NULL, TM_NOW, TIMESLEEP*1000);
while(1){
rt_task_wait_period(NULL);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|