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

This commit is contained in:
gdisirio 2008-03-28 11:39:30 +00:00
parent b83cd4a1dc
commit 42a90cc8ce
4 changed files with 37 additions and 10 deletions

View File

@ -73,17 +73,14 @@ static const seqop_t LED3_sequence[] =
/** /**
* Sequencer thread class. It can drive LEDs or other output pins. * Sequencer thread class. It can drive LEDs or other output pins.
*/ */
class SequencerThread : BaseThread { class SequencerThread : EnhancedThread<64> {
private: private:
WorkingArea(wa, 64); // Thread working area.
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);
@ -105,7 +102,8 @@ protected:
} }
public: public:
SequencerThread(const seqop_t *sequence) : BaseThread(NORMALPRIO, 0, wa, sizeof wa) { SequencerThread(const seqop_t *sequence):
EnhancedThread<64>("sequencer", NORMALPRIO, 0) {
base = curr = sequence; base = curr = sequence;
} }

View File

@ -12,8 +12,8 @@
generic and architecture indipendent. generic and architecture indipendent.
./src/templates/ - ChibiOS/RT non portable source templates, new ports ./src/templates/ - ChibiOS/RT non portable source templates, new ports
are started by copying the templates into a new are started by copying the templates into a new
directory under ./demos/. directory under ./demos/ and/or ./ports/.
./ports/ - Architecture/compiler specific portable files. ./ports/ - Architecture specific portable files.
./demos/ - Demo programs for specific archtectures/boards. ./demos/ - Demo programs for specific archtectures/boards.
./test/ - Test code, used by some demos. ./test/ - Test code, used by some demos.
./docs/Doxifile - Doxigen project file. ./docs/Doxifile - Doxigen project file.

View File

@ -29,12 +29,12 @@ namespace chibios_rt {
chSysInit(); chSysInit();
} }
void Lock(void) { void System::Lock(void) {
chSysLock(); chSysLock();
} }
void Unlock(void) { void System::Unlock(void) {
chSysUnlock(); chSysUnlock();
} }
@ -125,6 +125,11 @@ namespace chibios_rt {
#endif /* CH_USE_SLEEP */ #endif /* CH_USE_SLEEP */
#ifdef CH_USE_MESSAGES #ifdef CH_USE_MESSAGES
msg_t BaseThread::SendMessage(::Thread* tp, msg_t msg) {
return chMsgSend(tp, msg);
}
msg_t BaseThread::SendMessage(msg_t msg) { msg_t BaseThread::SendMessage(msg_t msg) {
return chMsgSend(thread_ref, msg); return chMsgSend(thread_ref, msg);

View File

@ -146,6 +146,11 @@ namespace chibios_rt {
#endif /* CH_USE_SLEEP */ #endif /* CH_USE_SLEEP */
#ifdef CH_USE_MESSAGES #ifdef CH_USE_MESSAGES
/**
* Sends a message to the thread and returns the answer.
*/
static msg_t SendMessage(::Thread *tp, msg_t msg);
/** /**
* Sends a message to the thread and returns the answer. * Sends a message to the thread and returns the answer.
*/ */
@ -178,6 +183,25 @@ namespace chibios_rt {
virtual msg_t Main(void); virtual msg_t Main(void);
}; };
/**
* Enhanced threads template class. This class introduces thread names
* and static working area allocation.
*/
template <int N>
class EnhancedThread : public BaseThread {
protected:
WorkingArea(wa, N); // Thread working area.
public:
const char *name;
EnhancedThread(const char *tname, tprio_t prio, tmode_t mode) :
BaseThread(prio, mode, wa, sizeof wa) {
name = tname;
}
};
#ifdef CH_USE_SEMAPHORES #ifdef CH_USE_SEMAPHORES
/** /**
* Class encapsulating a /p Semaphore. * Class encapsulating a /p Semaphore.