Skip to content

STM32 component for a course project CE/CZ3004 Multi-Disciplinary Project(MDP).

Notifications You must be signed in to change notification settings

CZ3004-Group-28/STM32_workspace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 

Repository files navigation

STM32_workspace

This repo contains C scripts for the STM32 module of a course project CE/CZ3004 Multi-Disciplinary Project(MDP). These scripts leverage FreeRTOS to achieve real-time multi-tasking among tasks that collectively contribute to the system functionality of a robot car.

Task structure

By default, the STM32CubeIDE generates a task template for every predefined task:

void runXXXTask(void *argument) {
  for (;;) {
    osDelay(10);
  }
}

When a task is given chance to be run, it will run infinitely within the for loop scope until voluntarily release the control via osDelay() or when an interrrupt occurs. With this information, a reusable task structure is came out to leverage the multi-tasking feature:

void runXXXTask(void *arguement) {
  for (;;) {
    if (curTask != TASK_XXX) osDelay(1000);
    else {
      // eg. move until y distance task
      while (curDistance < targetYDistance) {
        // run move robot car code
        // update curDistance value as robot move

        osDelay(1); // give other task chance to run but would like to get back to this task very soon
      }

      osDelay(1000); // task is completed here since already exit the while loop scope
    }
  }
}

If condition curTask != TASK_XXX is met, implies the current task is not this runXXXTask, therefore immediately release the control to other task via osDelay(1000), a big delay value is set (1000ms) such that the task won't be frequently scheduled again soon.

If condition curTask != TASK_XXX is not met, implies runXXXTask is indeed the current task to be run, therefore run it infinitely until voluntarily release, for instance, keep the task logic within a while loop.

the variable curTask can either be updated in an

  • an interrupt callback that receive instruction message from RPi, or
  • another runXXXTask that process message received from RPi, but has more complex logic to determine what value curTask need to be next.

About

STM32 component for a course project CE/CZ3004 Multi-Disciplinary Project(MDP).

Resources

Stars

Watchers

Forks