+\r
+/**\r
+ * @brief This function schedules a job created with @ref IotTaskPool_CreateJob or @ref IotTaskPool_CreateRecyclableJob\r
+ * against the system task pool. The system task pool is the task pool created by @ref IotTaskPool_CreateSystemTaskPool.\r
+ *\r
+ * See @ref taskpool_design for a description of the jobs lifetime and interaction with the threads used in the task pool\r
+ * library.\r
+ *\r
+ * @param[in] job A job to schedule for execution. This must be first initialized with a call to @ref IotTaskPool_CreateJob.\r
+ * @param[in] flags Flags to be passed by the user, e.g. to identify the job as high priority by specifying #IOT_TASKPOOL_JOB_HIGH_PRIORITY.\r
+ *\r
+ * @return One of the following:\r
+ * - #IOT_TASKPOOL_SUCCESS\r
+ * - #IOT_TASKPOOL_BAD_PARAMETER\r
+ * - #IOT_TASKPOOL_ILLEGAL_OPERATION\r
+ * - #IOT_TASKPOOL_NO_MEMORY\r
+ * - #IOT_TASKPOOL_SHUTDOWN_IN_PROGRESS\r
+ *\r
+ *\r
+ * @note This function will not allocate memory, so it is guaranteed to succeed if the parameters are correct and the task pool\r
+ * was correctly initialized, and not yet destroyed.\r
+ *\r
+ * <b>Example</b>\r
+ * @code{c}\r
+ * // An example of a user context to pass to a callback through a task pool thread.\r
+ * typedef struct JobUserContext\r
+ * {\r
+ * uint32_t counter;\r
+ * } JobUserContext_t;\r
+ *\r
+ * // An example of a user callback to invoke through a task pool thread.\r
+ * static void ExecutionCb( IotTaskPool_t taskPool, IotTaskPoolJob_t job, void * context )\r
+ * {\r
+ * ( void )taskPool;\r
+ * ( void )job;\r
+ *\r
+ * JobUserContext_t * pUserContext = ( JobUserContext_t * )context;\r
+ *\r
+ * pUserContext->counter++;\r
+ * }\r
+ *\r
+ * void TaskPoolExample( )\r
+ * {\r
+ * JobUserContext_t userContext = { 0 };\r
+ * IotTaskPoolJob_t job;\r
+ *\r
+ * // Create the system task pool. This example assumes the task pool is created successfully.\r
+ * // It is recommended to test the function's return value in production code.\r
+ * IotTaskPool_CreateSystemTaskPool( &xTaskPoolParameters );\r
+ *\r
+ * // Statically allocate one job, schedule it.\r
+ * IotTaskPool_CreateJob( &ExecutionCb, &userContext, &job );\r
+ *\r
+ * IotTaskPoolError_t errorSchedule = IotTaskPool_ScheduleSystem( &job, 0 );\r
+ *\r
+ * switch ( errorSchedule )\r
+ * {\r
+ * case IOT_TASKPOOL_SUCCESS:\r
+ * break;\r
+ * case IOT_TASKPOOL_BAD_PARAMETER: // Invalid parameters, such as a NULL handle, can trigger this error.\r
+ * case IOT_TASKPOOL_ILLEGAL_OPERATION: // Scheduling a job that was previously scheduled or destroyed could trigger this error.\r
+ * case IOT_TASKPOOL_NO_MEMORY: // Scheduling a with flag #IOT_TASKPOOL_JOB_HIGH_PRIORITY could trigger this error.\r
+ * case IOT_TASKPOOL_SHUTDOWN_IN_PROGRESS: // Scheduling a job after trying to destroy the task pool could trigger this error.\r
+ * // ASSERT\r
+ * break;\r
+ * default:\r
+ * // ASSERT\r
+ * }\r
+ *\r
+ * //\r
+ * // ... Perform other operations ...\r
+ * //\r
+ *\r
+ * IotTaskPool_Destroy( taskPool );\r
+ * }\r
+ * @endcode\r
+ */\r
+/* @[declare_taskpool_schedule] */\r
+IotTaskPoolError_t IotTaskPool_ScheduleSystem( IotTaskPoolJob_t pJob,\r
+ uint32_t flags );\r
+\r