Thanks, I'll try both ways.
Awesome, looking forward to the next version.
Hi Sander, If you already are a licensee, please contact Quantum Leaps through the contact page: https://www.state-machine.com/contact --MMS
Hi Miro, thank your for your reply and for confirming the issue that occurs when transitioning to history into a sub-machine. I have tried to find out what goes wrong in the QP framework itself regarding this issue, but so far without success. I am well aware that sub-machines are no longer supported. We have a commercial license but I believe it does not allow updates to any major version change (so QP7 -> QP8 is not allowed and neither is QM6 -> QM7), which is one reason we haven't bothered converting...
The way I've handled this in the past is to use a separate HW timer from the QP tick timer (and QP time events) and in the ISR used POST_X Hope that makes sense
I know that we should always avoid blocking code, but not all code is so wise and sometimes code we depend on has blocking calls (pigs as I think you called the in another post). When code is blocking the tick interrupt is still being called periodically, potentially posting timeout events into event queues. Depending on the size of the event queue, the frequency of the timer, and the length of the blocking call, these events can cause the queue to overflow if the actor is not able to run and process...
Hi Andrew, I'm not familiar with OpenCyphal , so it's hard for me to give authoritative advice. Of course, you are right that blocking should NOT be used inside active objects. But, as you write, blocking is only used in the example application, so hopefully it is not embedded inside the OpenCyphal library. If this is the case, I hope you will find a way to avoid blocking. Finally, if you have multiple identical "channels", you don't need to create a separate active object for each. Instead, one...
Hi Andrew, I'm not familiar with OpenCyphal , so it's hard for me to give authoritative advice. You are, of course, right that blocking should NOT be used inside active objects. But, as you write, blocking is only used in the example application, so hopefully it is not embedded inside the OpenCyphal library. If this is the case, I hope yo will find a way to avoid blocking. --MMS
Hi Sander, I could reproduce the issue with the transition to (deep) history and sub-machines in this older QP/C++ 7.3.4. Thank you for reporting the issue. However, I could NOT reproduce after converting sub-machines to regular composite states in the same older QP/C++ 7.3.4. I have attached the model (see sander.qm) and the state machine diagram after converting sub-machine states to regular states (see sander1.png). Also here is the output from an interactive testing session: C:\qp\qpcpp_7.3.4\examples\posix-win32\sander>build\qmsmtst...
Hi Andrew, I have looked at the qpc-rtthread project, but the port doesn't seem quite correct to me. For example, the scheduler locking mechanism (the QF_SCHED_LOCK_() and QF_SCHED_UNLOCK_() macros in qp_port.h file are implemented as critical section. However, this leads to nesting of critical sections, unnecessarily increases interrupt latency, and prevents higher-priority threads/AOs from running. At the same time, the correct mechanism (true scheduler locking) is available in RT-Thread (the rt_sched_lock()/rt_sched_unlock()...
Hi Andrew, I have looked at the qpc-rtthread project, but the port doesn't seem quite correct to me. For example, the scheduler locking mechanism (the QF_SCHED_LOCK_() and QF_SCHED_UNLOCK_() macros in qpc-rtthread/ports/rt-thread /qf_port.h file are implemented as critical section. However, this leads to nesting of critical sections, unnecessarily increases interrupt latency, and prevents higher-priority threads/AOs from running. At the same time, the correct mechanism (true scheduler locking) is...
Hi, Dr Samek Background is: I am trying to add the OpenCyphal framework to my QPC application. OpenCyphal is a universal protocol processing framework for drones. It uses dsdl to describe the data format and supports redundant transport processing. The framework provides three transport layer protocol libraries: can, udp, serial . My purpose is to use active objects to complete Cyphal protocol processing, which provides a standard publish and subscribe interface for the application layer, and manages...
Hi, Dr Samek Background is: I am trying to add the OpenCyphal framework to my QPC application. OpenCyphal is a universal protocol processing framework for drones. It uses dsdl to describe the data format and supports redundant transport processing. The framework provides three transport layer protocol libraries: can, udp, serial . My purpose is to use active objects to complete Cyphal protocol processing, which provides a standard publish and subscribe interface for the application layer, and manages...
Hi, Dr Samek Background is: I am trying to add the OpenCyphal framework to my QPC application. OpenCyphal is a universal protocol processing framework for drones. It uses dsdl to describe the data format and supports redundant transport processing. The framework provides three transport layer protocol libraries: can, udp, serial . My purpose is to use active objects to complete Cyphal protocol processing, which provides a standard publish and subscribe interface for the application layer, and manages...
Hi, Dr Samek I forked this project qpc-rtthread and made some modifications based on the latest version of rt-thread API. It is currently working well.
Some additional information: it looks like the entry actions for the sub-machine svy AND its sub-state x are correctly executed when performing the transition to history. Also, be refactoring the sub-machine sub into a normal (hierarchical) state, the problem still occurs. In short, it looks like it's only the entry action for surveying which is NOT executed when transitioning to history... Could it be related to the use of sub-machine svy? Kind regards, Sander
Some additional information: it looks like the entry actions for the sub-machine svy AND its sub-state x are correctly executed when performing the transition to history. In short, it looks like it's only the entry action for surveying which is NOT executed when transitioning to history... Kind regards, Sander
Hi Miro, I have a question about transition to history. It pertains specifically to how entry and action states are handled. For reference, I have attached a model that is a much simplified version of my actual model. (FYI: because this is a simplified model, the use of sub-machines doesn't seem to make sense but it does in our model.) For this issue, let's assume we're currently in state x, which is a state of sub-machine svy. Then, an EXT_EVENT occurs, which is successfully handled. So, a transition...
Noticed a link in the archive PDF. Was curious thanks for the link. Regards, SS
Hi Steve, I don't recall an official SST (Super Simple Tasker) port to AVR. Hower, SST is the precursor to the QK preemptive, non-blocking kernel. And there used to be a port of the QK-nano kernel to AVR (with GNU-AVR and IAR-AVR compilers). That code is part of the QP-nano framework and is still available on GitHub: https://github.com/QuantumLeaps/qpn/tree/master/ports/avr/qk MMS
Hi Steve, I don't recall an official SST port to AVR. Hower, SST is the precursor to the QK preemptive, non-blocking kernel. And there used to be a port of the QK-nano kernel to AVR (with GNU-AVR and IAR-AVR compilers). That code is part of the QP-nano framework and is still available on GitHub: https://github.com/QuantumLeaps/qpn/tree/master/ports/avr/qk MMS
I was wondering if the AVR Super Simple Tasker code might still be available? I had read and commented on the article back in 2006, noticed the link in the article put me on the homepage. Regards, Stephen Simmons
Players control a wave-shaped item in Space Waves as it continuously travels through confined spaces chock-full of jagged obstacles. The goal is to survive as long as you can by avoiding spikes, maneuvering through confined passages, and responding fast to abrupt changes in the level's layout.
Players control a wave-shaped item in Space Waves as it continuously travels through confined spaces chock-full of jagged obstacles. The goal is to survive as long as you can by avoiding spikes, maneuvering through confined passages, and responding fast to abrupt changes in the level's layout.
Hello Miro, Sorry for the late update — I was away during the year-end break. I found a way to show the full length of QP signal names on the sequence chart. For now, I increased the lane width in the code. In the long term, we should shorten the QP signal names, but that will take time because it requires a full software system redesign. Here is the change I made: diff --git i/qspy/source/qspy_seq.c w/qspy/source/qspy_seq.c index 851919d..7346e7e 100644 --- i/qspy/source/qspy_seq.c +++ w/qspy/source/qspy_seq.c...
hello the issue solved , i found the mistake thank you Regards, Guruprasad
QP 8.1.1, file qsafe.h compilation errors
QP 8.1.1, file qsafe.h compilation errors
QPC 8.0.4 Nesting 5 levels can make AO become unresponsive
Fixed in QP/C/C++ 8.1.1. --MMS
QPCPP 8.1.1 build errors with -Wsign-conversion
Hi Giulio, Thanks a lot for sharing your work! Many people ask about specific QP examples for various peripherals, like I2C. --MMS
8.1.1 qpcpp build errors with -Wsign-conversion
Hi guruprasad, I'm not sure that I entirely understand your problem, but it seems related to the fundamental question of "How much output is generated for any given input in QUTest". So, this question has been explained in the QUTest Manual, Section "Run-to-Completion Processing". Please read. As far as the tick() command (in the script) is concerned, it corresponds to a single call to the tick processing (one call to QTIMEEVT_TICK()). So, if some Time Events get freshly armed in an RTC step triggered...
Hi guruprasad, I'm not sure that I entirely understand your problem, but it seems related to the fundamental question of "How much output is generated for any given input in QUTest". So, this question has been explained in the QUTest Manual, Section "Run-to-Completion Processing". Please read. --MMS
hello , i followed your suggestion and try to replicate to my project and it succeeded in timeout count expiry and posting and dispatching the signal from the event queue and in test script reached the expectation of exiting the current state ( expect("===RTC===> St-Exit ) but while transitioning to the next state it stops executing i found out the reason as well , in the transition to next state there are two timers that are being armed so i am not able to understand what next step i have to follow...
hello Thank you for your response. in my case i am using Q_UTEST=1 , running Q_UTEST with the host so you meant to say that if running Q_UTEST on host tick() decrements the counter, expires the timer, posts the signal, AND dispatches it automatically. is this correct ?? Regards, Guruprasad
Hello Miro, Thank you for the update! I was actually about to type here to show the solution that I found. Nearly identical to what you posted above. In the add-on installation I changed the directory to the C:\Users\USER_NAME\AppData\Local\Keil_v5 After doing this, the Stellaris ICDI device comes up in the debugger. I appreciate your help and support on this and am looking forward to continung with the course now in Keil instead of IAR. Thank you and Happy New Year, Steven
Hi Steven, I have repeated the Stellaris ICDI installation, and the most important step appears to be the correct "Folder Selection" step, where you should select the location of your KEIL uVision installation. After the installation, your KEIL uVision folder should have an updated TOOLS.INI file, where the following lines should be added as follows: [UV2] . . . [ARM] . . . TDRV19=BIN\lmidk-agdi.dll("Stellaris ICDI") . . . [ARMADS] . . . TDRV19=BIN\lmidk-agdi.dll("Stellaris ICDI") . . . Also, the...
Out of curiosity, would you be able to share the contents of the C:\Keil_v5\ directory on your working machine? I am curious if the files I have here are correct.
Out of curiosity, would you be able to share the contents of the C:\Keil_v5\ directory on your working machine? I am curious if the files I have here are correct.
Out of curiosity, would you be able to share the contents of the C:\Keil_v5\ directory on your working machine? I am curious if the files I have here are correct.
Hello Miro, Thanks for getting back to me again. Today I will try again with version 5.42 as you have there on both my PCs and maybe also a fresh install on a new PC just to try. I will let you know if that works. I have been following the course with IAR up until lesson 7. I just had the board arrive last week and am very excited to keep the course until the end. Previously for lessons 0-3 I was just using the keil simulator. IAR works fine to support sterllaris debugger, but I don't have the license...
Hi everyone, I’d like to share an example of an I2C driver based on an NXP MCXA MCU. The repository is available here: In the folder /libraries/drivers/BSP/src you’ll find two files: bsp_i2c.c bsp_stwlc_driver.c The bsp_i2c.c file provides an example of an interrupt-driven I2C driver and shows how a peripheral can be managed using the QPC framework. The driver is designed as an orthogonal component and is used by the active object implemented in bsp_stwlc_driver.c. Please note that the driver has...
Hi Steven, I'm sorry to hear that your installation somehow doesn't work. It's difficult for me to troubleshoot this because I cannot reproduce the problem. I've attached a screenshot from my recent "Stellaris ICDI" add-on installation (see KEIL-5.42-Stellaris.jpg). As you can see, I have KEIL uVision 5.42.0.0 and the debugger is Stellaris ICDI. This is on Windows 11 Pro 64-bit. --MMS
Hi guruprasad, The behavior of the QUTest tick() command is illustrated in the QUTest examples (e.g., file qpc|qpcpp\examples\qutest\dpp\test_dpp\test_tick.py). You can see there that tick() is followed by the expectations of event posting and processing: . . . test("tick") glb_filter(GRP_ALL) current_obj(OBJ_TE, "Philo_inst[2].timeEvt") tick() expect(" Tick<0> Ctr=*") expect(" TE0-ADis Obj=Philo_inst[2].timeEvt,AO=Philo_inst[2]") expect("@timestamp TE0-Post Obj=Philo_inst[2].timeEvt,Sig=TIMEOUT_SIG,AO=Philo_inst[2]")...
Hi Steven, I'm sorry to hear that your installation somehow doesn't work. It's difficult for me to troubleshoot this because I cannot reproduce the problem. I've attached a screenshot from my recent "Stellaris ICDI" add-on installation (see KEIL-5.42-Stellaris.jpg). As you can see, I have KEIL uVision 5.42.0.0 and the debugger is Stellaris ICDI. --MMS
hello i have constructed a time event and set a signal to be posted to the queue when timeout happens and in test script if tick(..) is been written whether it will just only decrement the counter and timeout expires or it also, after expiry it will post the event and dispatch the signal ?? pls anybody help Regards, Guruprasad
Hello Miro, Thank you for getting back to me so quickly. I have tried to restart the PC as well as installed the add on multiple times. I tried both from the Quantum Leaps website as well as a forum post I found from ARM. Unfortuantely I can not get the debugger to appear. Thank you, Steven
Hi Steven, I'm not sure how you've installed the "Stellaris ICDI" add-on, but please close your KEIL uVision IDE and then re-open it again (after the installation). The KEIL uVision might be looking for the installed and available debuggers only once upon the startup. --MMS
Hi Steven, I'm not sure how you've installed the "Stellaris ICDI" add-on, but please close your KEIL uVision IDE and then re-open it again (after the installation). I believe that the KEIL uVision looks for the installed and available debuggers only once upon the startup. --MMS
Here is a list of the debug options after PC restart and install of Add Ons and Pack.
Hello Miro and Arun, I am facing the exact same issue where I can not get the stellaris ICDI to appear. I have tried two seperate PCs, V5.43 and V5.40 of Keil with the same results. The add on and pack installation go on with no issues, but the Stellaris never appears as a debug option. Thank you, Steven
Hi, Please see my response to your other inquiry in the discussion thread "Code coverage, including MC/DC, in QP applications". --MMS
Hi, Please see my response to your other inquiry in the discussion thread "code coverage report for QM project". --MMS
Hi guruprasad, First, let me clarify that when it comes to code coverage, it really doesn't matter how the code has been generated, manually or automatically by means of the QM modeling tool. Second, code coverage is measured by the instrumentation added during the compilation and linking, so you need a C or C++ compiler that can do this. It turns out that in GNU GCC 14.x the support for code coverage has been significantly improved to include full branch coverage (MC/DC) by means of the -fcondition-coverage...
Hello i am also using QUTest version 6.9.3 and want to generate the code coverage report , could you pls guide me how the report can be generated Regards guruprasad
hello , how can i generate a code coverage report for the project that is been created in QP pls share the details or any source of information that i need to follow thank you
Thanks all! I was able to figure it out.
Hi Charles, Thank you for your interest in the QSPY sequence diagram generation. Additionally, in the latest code base (v8.1.2), the QSEQ_genTran() function seems to have been removed. I'm not sure what you mean, and I cannot reproduce your problems. The sequence diagram generation feature is tested in every QSPY release, and it works in QSPY 8.1.2. I have attached the sequence diagrams generated by QSPY 8.1.2 from the latest QP/C and QP/C++. Has this feature been permanently removed from the regular...
Hi Charles, Thank you for your interest in the QSPY sequence diagram generation. Additionally, in the latest code base (v8.1.2), the QSEQ_genTran() function seems to have been removed. I'm not sure what you mean, and I cannot reproduce your problems. The sequence diagram generation feature is tested in every QSPY release, and it works in QSPY 8.1.2. I have attached the sequence diagrams generated by QSPY 8.1.2 from the latest QP/C and QP/C++. Has this feature been permanently removed from the regular...
Hi Charles, Thank you for your interest in the QSPY sequence diagram generation. Additionally, in the latest code base (v8.1.2), the QSEQ_genTran() function seems to have been removed. I'm not sure what you mean, and I cannot reproduce your problems. The sequence diagram generation feature is tested in every QSPY release, and it works in QSPY 8.1.2. Has this feature been permanently removed from the regular QP edition and only available in special editions (e.g., SafeQP)? No, the function QSEQ_genTran()...
Hello Miro, The Sequence Diagram helps visualize actions over time, making it easier to express design and understand SIGNAL sequences across AOs. However, it has a limitation: signal names are truncated to 15B (actually 16B in my .seq files), removing the most significant parts. Additionally, in the latest code base (v8.1.2), the QSEQ_genTran() function seems to have been removed. Questions: Has this feature been permanently removed from the regular QP edition and only available in special editions...