[Armadeus-commitlog] armadeus branch, master, updated. armadeus-5.3-rc1-35-gef0fd76
Brought to you by:
sszy
|
From: Sébastien S. <ss...@us...> - 2013-12-10 13:20:02
|
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "armadeus".
The branch, master has been updated
via ef0fd7672bbfc5f3bf5709892b1e1cd24029f80c (commit)
from 066f53d1be8630b7dc96c7ea3ce57964c00bd4d6 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit ef0fd7672bbfc5f3bf5709892b1e1cd24029f80c
Author: Sébastien Szymanski <ss...@us...>
Date: Tue Dec 10 14:15:53 2013 +0100
[DEMOS] add a demo to show shared memory usage.
-----------------------------------------------------------------------
Summary of changes:
buildroot/package/armadeus/demos/Config.in | 5 +++
buildroot/package/armadeus/demos/demos.mk | 4 +++
target/demos/README | 2 +
target/demos/shm/Makefile | 36 +++++++++++++++++++++++++
target/demos/shm/README | 6 ++++
target/demos/shm/shmreader.c | 39 +++++++++++++++++++++++++++
target/demos/shm/shmwriter.c | 40 ++++++++++++++++++++++++++++
7 files changed, 132 insertions(+), 0 deletions(-)
create mode 100644 target/demos/shm/Makefile
create mode 100644 target/demos/shm/README
create mode 100644 target/demos/shm/shmreader.c
create mode 100644 target/demos/shm/shmwriter.c
diff --git a/buildroot/package/armadeus/demos/Config.in b/buildroot/package/armadeus/demos/Config.in
index e0bc226..a607402 100644
--- a/buildroot/package/armadeus/demos/Config.in
+++ b/buildroot/package/armadeus/demos/Config.in
@@ -82,4 +82,9 @@ config BR2_PACKAGE_ARMADEUS_DEMOS_MCP25020
comment "MCP25020 demo requires package iproute2"
depends on !BR2_PACKAGE_IPROUTE2
+config BR2_PACKAGE_ARMADEUS_DEMOS_SHM
+ bool "Shared memory demo"
+ help
+ Test for shared memory.
+
endmenu
diff --git a/buildroot/package/armadeus/demos/demos.mk b/buildroot/package/armadeus/demos/demos.mk
index 48affaa..e6d8b51 100644
--- a/buildroot/package/armadeus/demos/demos.mk
+++ b/buildroot/package/armadeus/demos/demos.mk
@@ -78,6 +78,10 @@ ifeq ($(BR2_PACKAGE_ARMADEUS_DEMOS_MCP25020),y)
ARMADEUS-DEMOS_SUBDIRS+=mcp25020_ctrl
endif
+ifeq ($(BR2_PACKAGE_ARMADEUS_DEMOS_SHM),y)
+ARMADEUS-DEMOS_SUBDIRS+=shm
+endif
+
$(ARMADEUS-DEMOS_DIR)/.unpacked:
mkdir -p $(ARMADEUS-DEMOS_DIR)/
cd $(ARMADEUS-DEMOS_SOURCE); tar ch --exclude=.svn --exclude=.git . | tar x -C $(ARMADEUS-DEMOS_DIR)/
diff --git a/target/demos/README b/target/demos/README
index d5044e2..313a5f5 100644
--- a/target/demos/README
+++ b/target/demos/README
@@ -11,5 +11,7 @@ Some program examples to show how to use some Armadeus boards functionnalities:
Event handling in SDL (keyboard, mouse, joypad)
- real_time:
Xenomai examples
+- shm:
+ shared memory example
- wolfenstein3d:
SDL 3D game (buggy)
diff --git a/target/demos/shm/Makefile b/target/demos/shm/Makefile
new file mode 100644
index 0000000..e4a54af
--- /dev/null
+++ b/target/demos/shm/Makefile
@@ -0,0 +1,36 @@
+# Default values for local compiling:
+ARMADEUS_BASE_DIR:=$(shell pwd)/../../..
+-include $(ARMADEUS_BASE_DIR)/Makefile.in
+
+CC=$(ARMADEUS_TOOLCHAIN_PATH)/arm-linux-gcc
+STRIP:=$(ARMADEUS_TOOLCHAIN_PATH)arm-linux-sstrip
+DEFINES=-D$(ARMADEUS_BOARD_NAME)
+
+SHMWRITER = shmwriter
+SHMREADER = shmreader
+
+default: $(SHMWRITER) $(SHMREADER)
+
+all: $(SHMWRITER) $(SHMREADER)
+
+$(SHMWRITER): $(SHMWRITER).c
+ $(CC) $(CFLAGS) $(DEFINES) -Wall -o $@ $^ -lrt
+
+$(SHMREADER): $(SHMREADER).c
+ $(CC) $(CFLAGS) $(DEFINES) -Wall -o $@ $^ -lrt
+
+clean:
+ rm -rf $(SHMWRITER) $(SHMREADER)
+ rm -rf *.o
+
+install: $(SHMWRITER) $(SHMREADER)
+ cp $(SHMWRITER) $(INSTALL_DIR)/
+ cp $(SHMREADER) $(INSTALL_DIR)/
+ $(STRIP) $(INSTALL_DIR)/$(SHMWRITER)
+ $(STRIP) $(INSTALL_DIR)/$(SHMREADER)
+
+uninstall:
+ rm -f $(INSTALL_DIR)/$(SHMWRITER)
+ rm -f $(INSTALL_DIR)/$(SHMREADER)
+
+.PHONY: clean install uninstall
diff --git a/target/demos/shm/README b/target/demos/shm/README
new file mode 100644
index 0000000..ed64d71
--- /dev/null
+++ b/target/demos/shm/README
@@ -0,0 +1,6 @@
+Two simple C programms to show shared memory programming.
+The writer creates a shared memory object called "armadeus-shm".
+The shared memory object will be located in /dev/shm.
+
+USAGE:
+First run shmwriter then run shmreader and follows instructions.
diff --git a/target/demos/shm/shmreader.c b/target/demos/shm/shmreader.c
new file mode 100644
index 0000000..0a90efa
--- /dev/null
+++ b/target/demos/shm/shmreader.c
@@ -0,0 +1,39 @@
+#include <fcntl.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+int main(int argc, char *argv[]) {
+ char* str = 0;
+ int shmid = shm_open("/armadeus-shm", O_RDONLY, S_IRWXU);
+
+ if (shmid < 0) {
+ perror("Cannot open shared memory object");
+
+ return EXIT_FAILURE;
+ }
+
+ if((str = mmap(0, 1024*1024, PROT_READ, MAP_SHARED, shmid, 0)) == MAP_FAILED) {
+ perror("Cannot map shared memory object");
+ close(shmid);
+
+ return EXIT_FAILURE;
+ }
+
+ printf("shmwriter wrote:\n");
+ printf("%s", str);
+ printf("Now make some changes in the shared memory object (/dev/shm/armadeus-shm) then press RETURN...\n");
+
+ getchar();
+
+ printf("you wrote:\n");
+ printf("%s", str);
+
+ munmap(str, 1024*1024);
+ close(shmid);
+
+ return EXIT_SUCCESS;
+}
diff --git a/target/demos/shm/shmwriter.c b/target/demos/shm/shmwriter.c
new file mode 100644
index 0000000..56202a7
--- /dev/null
+++ b/target/demos/shm/shmwriter.c
@@ -0,0 +1,40 @@
+#include <fcntl.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/utsname.h>
+
+int main(int argc, char *argv[]) {
+ struct utsname sysnames;
+ char* str = "Hello ! You are on ";
+ int shmid = shm_open("/armadeus-shm", O_RDWR|O_CREAT|O_TRUNC, S_IRWXU);
+
+ if (shmid < 0) {
+ perror("Cannot open shared memory segment.");
+
+ return EXIT_FAILURE;
+ }
+
+ if (ftruncate(shmid, 1024*1024) < 0) {
+ perror("Cannot resize shared memory segment.");
+ close(shmid);
+ shm_unlink("/armadeus-shm");
+
+ return EXIT_FAILURE;
+ }
+
+ write(shmid, str, sizeof(char)*strlen(str));
+
+ uname(&sysnames);
+
+ write(shmid, sysnames.nodename, sizeof(char)*strlen(sysnames.nodename));
+ write(shmid, ".\n", 2*sizeof(char));
+
+ close(shmid);
+
+ return EXIT_SUCCESS;
+}
hooks/post-receive
--
armadeus
|