git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@5728 35acf78f-673a-0410-8e92-d51de3d6d3f4

master
gdisirio 2013-05-12 08:47:26 +00:00
parent fde582b119
commit 4f0b993b44
2 changed files with 25 additions and 33 deletions

View File

@ -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
# #

View File

@ -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;
} }