On Fri, Jul 22, 2022 at 12:12 AM Fotis Panagiotopoulos <f.j.pa...@gmail.com> wrote:
> Here is the actual issue: > > The timer g_system_timer is updated in the IDLE task. > This causes problems, because time is not advancing if the system does not > have any idle time. > > Ok, you don't enable tickless mode. If you enable it like us, the timestamp will reflect the real value even if some thread is busy. The timer behaves erratically, or just gets stuck. > For example, a spin-lock-like structure, as is the following snippet, works > correctly on a hardware target, but locks-up in sim: > > while ((clock() - start) < TIMEOUT) > { > if (foo()) > break; > } > > I thought that I should move g_system_timer in the loop task, but then I > realized that it also runs at SCHED_PRIORITY_MIN. > > I expect similar problems on other parts of the simulator, in such > spin-lock like codes. > For example while waiting for serial input, without any sleep. > (Practically all cases that are normally served by interrupts). > > > My proposition is to: > * Set the loop task to SCHED_PRIORITY_MAX. (I tested it, it works and I > don't expect side effects). > * Move the remaining logic within the idle task to the loop task. > > > What do you think? > > I think it's fine or better to use the highest priority thread to simulate the interrupt. > > On Thu, Jul 21, 2022 at 6:56 PM Xiang Xiao <xiaoxiang781...@gmail.com> > wrote: > > > On Thu, Jul 21, 2022 at 11:27 PM Fotis Panagiotopoulos < > > f.j.pa...@gmail.com> > > wrote: > > > > > Hello, > > > > > > I am having some issues with scheduling in simulator. > > > I noticed that there is a "loop task", that performs various > > house-keeping > > > tasks. > > > > > > This task is started with a priority of SCHED_PRIORITY_MIN. > > > Is this correct / on-purpose? > > > > > > > > The house keeping work ran in the idle loop before, but since some work > may > > sleep/wait internally, we have to move them to the "loop task". That's > why > > we select SCHED_PRIORITY_MIN. > > > > > > > I would expect this task to run on maximum priority, simulating various > > > interrupt or timer events that an MCU would normally have. > > > > > > > It should be fine to increase the priority of the "loop task". > > >