Floating point operations in the thread

  • Include the following function at the beginning of each task, which uses floating-point calculations:

portTASK_USES_FLOATING_POINT();

Printing numbers

  • Standard C function printf() does not work in freeRTOS. Use xil_printf() instead.
  • xil_printf() does not support printing float or double. To print double with constant precision, use the following function (or adapt it to your needs):
void printDouble8(double fval) {
   double fval2=fval;
   int intergerPart, fractionalPart;
   if (fval2>INT32_MAX || fval2<= INT32_MIN) {
      xil_printf("XXX.XXXXXXXX");
      return;
   }
   int sign=0;
   if (fval2<0) sign = 1;
   fval2 = fabs(fval2);
   intergerPart = fval2;
   fractionalPart = (fval2 - intergerPart) * 100000000;
   if (sign) xil_printf("-");
   xil_printf("%d.%08d", intergerPart, fractionalPart);
}

 

Quitting task

  • Most of tasks in freeRTOS should contain infinte loop, which never quits.
  • However, if you need to quit a task, add the function vTaskDelete( ) at the end.