aboutsummaryrefslogtreecommitdiffstats
path: root/demos
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-01-10 09:35:58 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2009-01-10 09:35:58 +0000
commit49fe48fd7a816f46eb50a52342d14173ffbd0c1e (patch)
tree8a19c6499fcf418ec461b8950d7acb5019f4216e /demos
parented0322b9cb4234fdb4c230eee41a1449ae0479cb (diff)
downloadChibiOS-49fe48fd7a816f46eb50a52342d14173ffbd0c1e.tar.gz
ChibiOS-49fe48fd7a816f46eb50a52342d14173ffbd0c1e.tar.bz2
ChibiOS-49fe48fd7a816f46eb50a52342d14173ffbd0c1e.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@601 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'demos')
-rw-r--r--demos/Win32-MinGW/Makefile2
-rw-r--r--demos/Win32-MinGW/chcore.c91
-rw-r--r--demos/Win32-MinGW/chcore.h2
-rw-r--r--demos/Win32-MinGW/chcore2.s43
4 files changed, 73 insertions, 65 deletions
diff --git a/demos/Win32-MinGW/Makefile b/demos/Win32-MinGW/Makefile
index 46cb9cad0..bda1426cb 100644
--- a/demos/Win32-MinGW/Makefile
+++ b/demos/Win32-MinGW/Makefile
@@ -65,7 +65,7 @@ SRC = chcore.c main.c ../../ports/win32/simcom.c \
${TESTSRC}
# List ASM source files here
-ASRC = chcore2.s
+ASRC =
# List all user directories here
UINCDIR = ../../src/include
diff --git a/demos/Win32-MinGW/chcore.c b/demos/Win32-MinGW/chcore.c
index 1d1a134b7..1dc05569c 100644
--- a/demos/Win32-MinGW/chcore.c
+++ b/demos/Win32-MinGW/chcore.c
@@ -17,6 +17,11 @@
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#include <windows.h>
+#include <stdio.h>
+
+#undef CDECL
+
/**
* @addtogroup WIN32SIM_CORE
* @{
@@ -24,20 +29,75 @@
#include <ch.h>
+static LARGE_INTEGER nextcnt;
+static LARGE_INTEGER slice;
+
+void InitSimCom1(void);
+void InitSimCom2(void);
+BOOL Com1ConnInterruptSimCom(void);
+BOOL Com2ConnInterruptSimCom(void);
+BOOL Com1InInterruptSimCom(void);
+BOOL Com2InInterruptSimCom(void);
+BOOL Com1OutInterruptSimCom(void);
+BOOL Com2OutInterruptSimCom(void);
+
/*
- * This file is a template of the system driver functions provided by a port.
- * Some of the following functions may be implemented as macros in chcore.h if
- * the implementer decides that there is an advantage in doing so, as example
- * because performance concerns.
+ * Simulated HW initialization.
*/
+void InitCore(void) {
+ WSADATA wsaData;
+
+ // Initialization.
+ if (WSAStartup(2, &wsaData) != 0) {
+ printf("Unable to locate a winsock DLL\n");
+ exit(1);
+ }
+
+ printf("Win32 ChibiOS/RT simulator\n\n");
+ printf("Thread structure %d bytes\n", sizeof(Thread));
+ if (!QueryPerformanceFrequency(&slice)) {
+ printf("QueryPerformanceFrequency() error");
+ exit(1);
+ }
+ printf("Core Frequency %u Hz\n", (int)slice.LowPart);
+ slice.QuadPart /= CH_FREQUENCY;
+ QueryPerformanceCounter(&nextcnt);
+ nextcnt.QuadPart += slice.QuadPart;
+
+ InitSimCom1();
+ InitSimCom2();
+ fflush(stdout);
+}
+
+/*
+ * Interrupt simulation.
+ */
+void ChkIntSources(void) {
+ LARGE_INTEGER n;
+
+ if (Com1InInterruptSimCom() || Com2InInterruptSimCom() ||
+ Com1OutInterruptSimCom() || Com2OutInterruptSimCom() ||
+ Com1ConnInterruptSimCom() || Com2ConnInterruptSimCom()) {
+ if (chSchRescRequiredI())
+ chSchDoRescheduleI();
+ return;
+ }
+
+ // Interrupt Timer simulation (10ms interval).
+ QueryPerformanceCounter(&n);
+ if (n.QuadPart > nextcnt.QuadPart) {
+ nextcnt.QuadPart += slice.QuadPart;
+ chSysTimerHandlerI();
+ if (chSchRescRequiredI())
+ chSchDoRescheduleI();
+ }
+}
/**
* Prints a message on the system console.
* @param msg pointer to the message
- * @note The function is declared as a weak symbol, it is possible to redefine
- * it in your application code.
*/
-__attribute__((weak))
+__attribute__((fastcall))
void sys_puts(char *msg) {
}
@@ -45,12 +105,10 @@ void sys_puts(char *msg) {
* Performs a context switch between two threads.
* @param otp the thread to be switched out
* @param ntp the thread to be switched in
- * @note The function is declared as a weak symbol, it is possible to redefine
- * it in your application code.
*/
-__attribute__((naked, weak))
+__attribute__((fastcall))
void sys_switch(Thread *otp, Thread *ntp) {
- register struct intctx *esp asm("esp");
+ register struct intctx volatile *esp asm("esp");
asm volatile ("push %ebp \n\t" \
"push %esi \n\t" \
@@ -61,16 +119,13 @@ void sys_switch(Thread *otp, Thread *ntp) {
asm volatile ("pop %ebx \n\t" \
"pop %edi \n\t" \
"pop %esi \n\t" \
- "pop %ebp \n\t" \
- "ret" : : "r" (esp));
+ "pop %ebp");
}
/**
* Halts the system. In this implementation it just exits the simulation.
- * @note The function is declared as a weak symbol, it is possible to redefine
- * it in your application code.
*/
-__attribute__((weak))
+__attribute__((fastcall))
void sys_halt(void) {
exit(2);
@@ -78,15 +133,11 @@ void sys_halt(void) {
/**
* Threads return point, it just invokes @p chThdExit().
- * @note The function is declared as a weak symbol, it is possible to redefine
- * it in your application code.
*/
-__attribute__((naked, weak))
void threadexit(void) {
asm volatile ("push %eax \n\t" \
"call _chThdExit");
}
-}
/** @} */
diff --git a/demos/Win32-MinGW/chcore.h b/demos/Win32-MinGW/chcore.h
index 6c9bf1f7e..2a9fe7de8 100644
--- a/demos/Win32-MinGW/chcore.h
+++ b/demos/Win32-MinGW/chcore.h
@@ -66,7 +66,7 @@ struct intctx {
* pointer to a @p intctx structure.
*/
typedef struct {
- struct intctx *esp;
+ struct intctx volatile *esp;
} Context;
#define APUSH(p, a) (p) -= sizeof(void *), *(void **)(p) = (void*)(a)
diff --git a/demos/Win32-MinGW/chcore2.s b/demos/Win32-MinGW/chcore2.s
deleted file mode 100644
index 9334fbfdc..000000000
--- a/demos/Win32-MinGW/chcore2.s
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- ChibiOS/RT - Copyright (C) 2006-2007 Giovanni Di Sirio.
-
- This file is part of ChibiOS/RT.
-
- ChibiOS/RT is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- ChibiOS/RT is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-.text
-
-.p2align 4,,15
-.globl @chSysSwitchI@8
-@chSysSwitchI@8:
- # Switch out
- push %ebp
- push %esi
- push %edi
- push %ebx
- movl %esp,16(%ecx)
- # Switch in
- movl 16(%edx),%esp
- pop %ebx
- pop %edi
- pop %esi
- pop %ebp
- ret
-
-.p2align 4,,15
-.globl @threadstart@0
-@threadstart@0:
- push %eax
- call _chThdExit