Hello,
I have tested QPC which is state machine on my beagleboard and zedboard.
This product provides a good method for developing application that are
needed for Real Time appliction .
http://www.state-machine.com/ There is considerable information at this
site. I shared several e-mails with Dr. Miro Samek about becoming Yocto
compatible. On my Fedora18 there is also a product QSP for debugging.
Basic pieces are either qpc_4.5.04.zip & qdkc_pic32-xc32.zip for C or
qpcpp_4.5.04.zip & qdkcpp_pic32-xc32.zip for C++. The heart of the process
is QM which is a graphical process for developing the the state machine.
The are ports for many arch. I have tested on arduino chipKIT 32 MAX
beagleboard and just now on the zedboard.
This is the is
root at zedboard:~/qpc/examples/posix/gnu/dpp/dbg# ./dpp
Dining Philosopher Problem example
QEP 4.5.04
QF 4.5.04
Press p to pause/un-pause
Press ESC to quit...
Philosopher 0 is thinking
Philosopher 1 is thinking
Philosopher 2 is thinking
Philosopher 3 is thinking
Philosopher 4 is thinking
Philosopher 4 is hungry
Philosopher 4 is eating
Philosopher 0 is hungry
Philosopher 2 is hungry
Philosopher 2 is eating
Philosopher 1 is hungry
Philosopher 3 is hungry
Philosopher 4 is thinking
Philosopher 0 is eating
Philosopher 2 is thinking
Philosopher 3 is eating
Philosopher 4 is hungry
Philosopher 3 is thinking
Philosopher 0 is thinking
This is an example of QSP on Fedora18 x86_64
[vidal at ws009 spy]$ ./dpp
Dining Philosopher Problem example
QEP 4.5.04
QF 4.5.04
Press p to pause/un-pause
Press ESC to quit...
-T 4
-O 4
-F 4
-S 2
-E 4
-Q 4
-P 4
-B 4
-C 4
********** QS_RESET
********** QS_RESET
Obj Dic: 0000000008054592->&l_clock_tick
Usr Dic: 00000046 ->PHILO_STAT
Obj Dic: 0000000008058540->l_smlPoolSto
Obj Dic: 0000000008058460->l_tableQueueSto
Obj Dic: 0000000008058480->l_philoQueueSto[0]
Obj Dic: 0000000008058494->l_philoQueueSto[1]
Obj Dic: 00000000080584A8->l_philoQueueSto[2]
Obj Dic: 00000000080584BC->l_philoQueueSto[3]
Obj Dic: 00000000080584D0->l_philoQueueSto[4]
Obj Dic: 00000000080585C0->&l_philo[0]
Obj Dic: 0000000008058618->&l_philo[0].timeEvt
Obj Dic: 000000000805862C->&l_philo[1]
Obj Dic: 0000000008058684->&l_philo[1].timeEvt
Obj Dic: 0000000008058698->&l_philo[2]
Obj Dic: 00000000080586F0->&l_philo[2].timeEvt
Obj Dic: 0000000008058704->&l_philo[3]
Obj Dic: 000000000805875C->&l_philo[3].timeEvt
Obj Dic: 0000000008058770->&l_philo[4]
Obj Dic: 00000000080587C8->&l_philo[4].timeEvt
Fun Dic: 000000000804983E->&Philo_initial
Fun Dic: 0000000008049E13->&Philo_thinking
Fun Dic: 0000000008049F03->&Philo_hungry
Fun Dic: 000000000804A01A->&Philo_eating
Sig Dic: 00000009,Obj=00000000080585C0 ->HUNGRY_SIG
Sig Dic: 0000000A,Obj=00000000080585C0 ->TIMEOUT_SIG
Q_INIT : Obj=l_philo[0] Source=0805119C Target=Philo_thinking
Q_ENTRY: Obj=l_philo[0] State=Philo_thinking
0000000000 ==>Init: Obj=l_philo[0] New=Philo_thinking
Sig Dic: 00000009,Obj=000000000805862C ->HUNGRY_SIG
Sig Dic: 0000000A,Obj=000000000805862C ->TIMEOUT_SIG
Q_INIT : Obj=l_philo[1] Source=0805119C Target=Philo_thinking
Q_ENTRY: Obj=l_philo[1] State=Philo_thinking
0000000000 ==>Init: Obj=l_philo[1] New=Philo_thinking
Sig Dic: 00000009,Obj=0000000008058698 ->HUNGRY_SIG
Sig Dic: 0000000A,Obj=0000000008058698 ->TIMEOUT_SIG
Q_INIT : Obj=l_philo[2] Source=0805119C Target=Philo_thinking
Q_ENTRY: Obj=l_philo[2] State=Philo_thinking
0000000000 ==>Init: Obj=l_philo[2] New=Philo_thinking
Sig Dic: 00000009,Obj=0000000008058704 ->HUNGRY_SIG
Sig Dic: 0000000A,Obj=0000000008058704 ->TIMEOUT_SIG
Q_INIT : Obj=l_philo[3] Source=0805119C Target=Philo_thinking
Q_ENTRY: Obj=l_philo[3] State=Philo_thinking
0000000000 ==>Init: Obj=l_philo[3] New=Philo_thinking
Sig Dic: 00000009,Obj=0000000008058770 ->HUNGRY_SIG
Sig Dic: 0000000A,Obj=0000000008058770 ->TIMEOUT_SIG
Q_INIT : Obj=l_philo[4] Source=0805119C Target=Philo_thinking
Q_ENTRY: Obj=l_philo[4] State=Philo_thinking
0000000000 ==>Init: Obj=l_philo[4] New=Philo_thinking
Obj Dic: 00000000080587E0->&l_table
Fun Dic: 000000000805119C->&QHsm_top
Fun Dic: 000000000804A19C->&Table_initial
Fun Dic: 000000000804A5D8->&Table_serving
Sig Dic: 00000005,Obj=0000000000000000 ->DONE_SIG
Sig Dic: 00000004,Obj=0000000000000000 ->EAT_SIG
Sig Dic: 00000006,Obj=0000000000000000 ->PAUSE_SIG
Sig Dic: 00000007,Obj=0000000000000000 ->TERMINATE_SIG
Sig Dic: 00000009,Obj=00000000080587E0 ->HUNGRY_SIG
Philosopher 0 is thinking
Philosopher 1 is thinking
Philosopher 2 is thinking
Philosopher 3 is thinking
Philosopher 4 is thinking
0000000000 PHILO_STAT: 0 thinking
0000000000 PHILO_STAT: 1 thinking
0000000000 PHILO_STAT: 2 thinking
0000000000 PHILO_STAT: 3 thinking
0000000000 PHILO_STAT: 4 thinking
Q_INIT : Obj=l_table Source=QHsm_top Target=Table_serving
Q_ENTRY: Obj=l_table State=Table_serving
0000000000 ==>Init: Obj=l_table New=Table_serving
Philosopher 4 is hungry
Philosopher 4 is eating
0000000000 Disp==>: Obj=l_philo[4] Sig=TIMEOUT_SIG Active=Philo_thinking
Q_ENTRY: Obj=l_philo[4] State=Philo_hungry
0000000000 ==>Tran: Obj=l_philo[4] Sig=TIMEOUT_SIG Source=Philo_thinking
New=Philo_hungry
0000000000 Disp==>: Obj=l_table Sig=HUNGRY_SIG Active=Table_serving
0000000000 PHILO_STAT: 4 hungry
0000000000 Disp==>: Obj=l_philo[4] Sig=EAT_SIG Active=Philo_hungry
Q_ENTRY: Obj=l_philo[4] State=Philo_eating
0000000000 ==>Tran: Obj=l_philo[4] Sig=EAT_SIG Source=Philo_hungry
New=Philo_eating
0000000000 Disp==>: Obj=l_philo[3] Sig=EAT_SIG Active=Philo_thinking
0000000000 Intern : Obj=l_philo[3] Sig=EAT_SIG Source=Philo_thinking
0000000000 Disp==>: Obj=l_philo[2] Sig=EAT_SIG Active=Philo_thinking
0000000000 Intern : Obj=l_philo[2] Sig=EAT_SIG Source=Philo_thinking
0000000000 Disp==>: Obj=l_philo[1] Sig=EAT_SIG Active=Philo_thinking
0000000000 Intern : Obj=l_philo[1] Sig=EAT_SIG Source=Philo_thinking
0000000000 Disp==>: Obj=l_philo[0] Sig=EAT_SIG Active=Philo_thinking
0000000000 Intern : Obj=l_philo[0] Sig=EAT_SIG Source=Philo_thinking
0000000000 PHILO_STAT: 4 eating
0000000000 Intern : Obj=l_table Sig=HUNGRY_SIG Source=Table_serving
Philosopher 0 is hungry
If you have any questions feel free to contact me.
Edward Vidal Jr vidal.develone at gmail.com or develone at sbcglobal.net