git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@5728 35acf78f-673a-0410-8e92-d51de3d6d3f4
parent
fde582b119
commit
4f0b993b44
|
@ -64,6 +64,7 @@ include $(CHIBIOS)/os/hal/platforms/STM32F1xx/platform.mk
|
||||||
include $(CHIBIOS)/os/hal/hal.mk
|
include $(CHIBIOS)/os/hal/hal.mk
|
||||||
include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F1xx/port.mk
|
include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F1xx/port.mk
|
||||||
include $(CHIBIOS)/os/kernel/kernel.mk
|
include $(CHIBIOS)/os/kernel/kernel.mk
|
||||||
|
include $(CHIBIOS)/os/various/cpp_wrappers/kernel.mk
|
||||||
include $(CHIBIOS)/test/test.mk
|
include $(CHIBIOS)/test/test.mk
|
||||||
|
|
||||||
# Define linker script file here
|
# Define linker script file here
|
||||||
|
@ -82,7 +83,8 @@ CSRC = $(PORTSRC) \
|
||||||
|
|
||||||
# C++ sources that can be compiled in ARM or THUMB mode depending on the global
|
# C++ sources that can be compiled in ARM or THUMB mode depending on the global
|
||||||
# setting.
|
# setting.
|
||||||
CPPSRC = $(CHIBIOS)/os/various/ch.cpp main.cpp
|
CPPSRC = $(CHCPPSRC) \
|
||||||
|
main.cpp
|
||||||
|
|
||||||
# C sources to be compiled in ARM mode regardless of the global setting.
|
# C sources to be compiled in ARM mode regardless of the global setting.
|
||||||
# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
|
# NOTE: Mixing ARM and THUMB mode enables the -mthumb-interwork compiler
|
||||||
|
@ -109,6 +111,7 @@ ASMSRC = $(PORTASM)
|
||||||
|
|
||||||
INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
|
INCDIR = $(PORTINC) $(KERNINC) $(TESTINC) \
|
||||||
$(HALINC) $(PLATFORMINC) $(BOARDINC) \
|
$(HALINC) $(PLATFORMINC) $(BOARDINC) \
|
||||||
|
$(CHCPPINC) \
|
||||||
$(CHIBIOS)/os/various
|
$(CHIBIOS)/os/various
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
#include "ch.hpp"
|
#include "ch.hpp"
|
||||||
#include "hal.h"
|
#include "hal.h"
|
||||||
#include "test.h"
|
#include "test.h"
|
||||||
#include "evtimer.h"
|
|
||||||
|
|
||||||
using namespace chibios_rt;
|
using namespace chibios_rt;
|
||||||
|
|
||||||
|
@ -65,16 +64,16 @@ static const seqop_t LED1_sequence[] =
|
||||||
* Any sequencer is just an instance of this class, all the details are
|
* Any sequencer is just an instance of this class, all the details are
|
||||||
* totally encapsulated and hidden to the application level.
|
* totally encapsulated and hidden to the application level.
|
||||||
*/
|
*/
|
||||||
class SequencerThread : public EnhancedThread<128> {
|
class SequencerThread : public BaseStaticThread<128> {
|
||||||
private:
|
private:
|
||||||
const seqop_t *base, *curr; // Thread local variables.
|
const seqop_t *base, *curr; // Thread local variables.
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual msg_t Main(void) {
|
virtual msg_t main(void) {
|
||||||
while (true) {
|
while (true) {
|
||||||
switch(curr->action) {
|
switch(curr->action) {
|
||||||
case SLEEP:
|
case SLEEP:
|
||||||
Sleep(curr->value);
|
sleep(curr->value);
|
||||||
break;
|
break;
|
||||||
case GOTO:
|
case GOTO:
|
||||||
curr = &base[curr->value];
|
curr = &base[curr->value];
|
||||||
|
@ -93,7 +92,7 @@ protected:
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SequencerThread(const seqop_t *sequence) : EnhancedThread<128>("sequencer") {
|
SequencerThread(const seqop_t *sequence) : BaseStaticThread<128>() {
|
||||||
|
|
||||||
base = curr = sequence;
|
base = curr = sequence;
|
||||||
}
|
}
|
||||||
|
@ -102,40 +101,29 @@ public:
|
||||||
/*
|
/*
|
||||||
* Tester thread class. This thread executes the test suite.
|
* Tester thread class. This thread executes the test suite.
|
||||||
*/
|
*/
|
||||||
class TesterThread : public EnhancedThread<256> {
|
class TesterThread : public BaseStaticThread<256> {
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual msg_t Main(void) {
|
virtual msg_t main(void) {
|
||||||
|
|
||||||
|
setName("tester");
|
||||||
|
|
||||||
return TestThread(&SD2);
|
return TestThread(&SD2);
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TesterThread(void) : EnhancedThread<256>("tester") {
|
TesterThread(void) : BaseStaticThread<256>() {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/* Static threads instances.*/
|
||||||
* Executed as an event handler at 500mS intervals.
|
static TesterThread tester;
|
||||||
*/
|
static SequencerThread blinker1(LED1_sequence);
|
||||||
static void TimerHandler(eventid_t id) {
|
|
||||||
|
|
||||||
(void)id;
|
|
||||||
if (palReadPad(GPIOA, GPIOA_BUTTON)) {
|
|
||||||
TesterThread tester;
|
|
||||||
tester.Wait();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Application entry point.
|
* Application entry point.
|
||||||
*/
|
*/
|
||||||
int main(void) {
|
int main(void) {
|
||||||
static const evhandler_t evhndl[] = {
|
|
||||||
TimerHandler
|
|
||||||
};
|
|
||||||
static EvTimer evt;
|
|
||||||
struct EventListener el0;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* System initializations.
|
* System initializations.
|
||||||
|
@ -145,28 +133,29 @@ int main(void) {
|
||||||
* RTOS is active.
|
* RTOS is active.
|
||||||
*/
|
*/
|
||||||
halInit();
|
halInit();
|
||||||
System::Init();
|
System::init();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Activates the serial driver 2 using the driver default configuration.
|
* Activates the serial driver 2 using the driver default configuration.
|
||||||
*/
|
*/
|
||||||
sdStart(&SD2, NULL);
|
sdStart(&SD2, NULL);
|
||||||
|
|
||||||
evtInit(&evt, 500); // Initializes an event timer.
|
|
||||||
evtStart(&evt); // Starts the event timer.
|
|
||||||
chEvtRegister(&evt.et_es, &el0, 0); // Registers a listener on the source.
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Starts several instances of the SequencerThread class, each one operating
|
* Starts several instances of the SequencerThread class, each one operating
|
||||||
* on a different LED.
|
* on a different LED.
|
||||||
*/
|
*/
|
||||||
SequencerThread blinker1(LED1_sequence);
|
blinker1.start(NORMALPRIO + 10);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Serves timer events.
|
* Serves timer events.
|
||||||
*/
|
*/
|
||||||
while (true)
|
while (true) {
|
||||||
Event::Dispatch(evhndl, Event::WaitOne(ALL_EVENTS));
|
if (palReadPad(GPIOA, GPIOA_BUTTON)) {
|
||||||
|
tester.start(NORMALPRIO);
|
||||||
|
tester.wait();
|
||||||
|
};
|
||||||
|
BaseThread::sleep(MS2ST(500));
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue