Advertisement
Guest User

Untitled

a guest
Mar 2nd, 2022
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Nim 0.98 KB | None | 0 0
  1. # This is the FreeRTOS xTaskCreate that I believe has been passed through c2nim
  2. type
  3.   TaskFunction_t* = proc (a1: pointer) {.cdecl.}
  4.  
  5. proc xTaskCreate*(pvTaskCode: TaskFunction_t; pcName: cstring;
  6.                  usStackDepth: uint32; pvParameters: pointer;
  7.                  uxPriority: UBaseType_t; pvCreatedTask: ptr TaskHandle_t): BaseType_t {.
  8.     inline.} =
  9.   return xTaskCreatePinnedToCore(pvTaskCode, pcName, usStackDepth, pvParameters,
  10.                                 uxPriority, pvCreatedTask, tskNO_AFFINITY)
  11.  
  12. ## Okay, so my crappy incorrect code
  13. type
  14.   Task* = object
  15.     name: string
  16.     handle: TaskHandle_t
  17.     ret: BaseType_t
  18.  
  19. proc newTask*(cb: proc(), name: string, stackSize: SzBytes): Task =
  20.   result.name = name
  21.   # This obviously doesn't work
  22.   proc wrapper (a1: pointer) {.cdecl.} =
  23.     cb()
  24.  
  25.   result.ret = xTaskCreate(wrapper, cstring(result.name), stackSize.uint32, nil, 10, addr result.handle)
  26.  
  27. proc `=destroy`*(t: var Task) =
  28.   vTaskDelete(t.handle)
  29.  
  30.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement