git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@8942 35acf78f-673a-0410-8e92-d51de3d6d3f4
This commit is contained in:
parent
6d6284c9e6
commit
8faa787ebe
|
@ -37,6 +37,10 @@
|
||||||
#error "CH_CFG_ST_FREQUENCY is not a multiple of 1000"
|
#error "CH_CFG_ST_FREQUENCY is not a multiple of 1000"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if CH_CFG_USE_REGISTRY == FALSE
|
||||||
|
#error "NASA OSAL requires CH_CFG_USE_REGISTRY"
|
||||||
|
#endif
|
||||||
|
|
||||||
#if CH_CFG_USE_EVENTS == FALSE
|
#if CH_CFG_USE_EVENTS == FALSE
|
||||||
#error "NASA OSAL requires CH_CFG_USE_EVENTS"
|
#error "NASA OSAL requires CH_CFG_USE_EVENTS"
|
||||||
#endif
|
#endif
|
||||||
|
@ -49,10 +53,6 @@
|
||||||
#error "NASA OSAL requires CH_CFG_USE_SEMAPHORES"
|
#error "NASA OSAL requires CH_CFG_USE_SEMAPHORES"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if CH_CFG_USE_REGISTRY == FALSE
|
|
||||||
#error "NASA OSAL requires CH_CFG_USE_REGISTRY"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if CH_CFG_USE_MEMCORE == FALSE
|
#if CH_CFG_USE_MEMCORE == FALSE
|
||||||
#error "NASA OSAL requires CH_CFG_USE_MEMCORE"
|
#error "NASA OSAL requires CH_CFG_USE_MEMCORE"
|
||||||
#endif
|
#endif
|
||||||
|
@ -61,6 +61,10 @@
|
||||||
#error "NASA OSAL requires CH_CFG_USE_MEMPOOLS"
|
#error "NASA OSAL requires CH_CFG_USE_MEMPOOLS"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if CH_CFG_USE_DYNAMIC == FALSE
|
||||||
|
#error "NASA OSAL requires CH_CFG_USE_DYNAMIC"
|
||||||
|
#endif
|
||||||
|
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
/* Module local definitions. */
|
/* Module local definitions. */
|
||||||
/*===========================================================================*/
|
/*===========================================================================*/
|
||||||
|
@ -1279,6 +1283,9 @@ int32 OS_TaskCreate(uint32 *task_id,
|
||||||
|
|
||||||
/* Converting priority to RT type.*/
|
/* Converting priority to RT type.*/
|
||||||
rt_prio = (tprio_t)256 - (tprio_t)priority;
|
rt_prio = (tprio_t)256 - (tprio_t)priority;
|
||||||
|
if (rt_prio == 1) {
|
||||||
|
rt_prio = 2;
|
||||||
|
}
|
||||||
|
|
||||||
tp = chThdCreateFromHeap(NULL, (size_t)stack_size, task_name,
|
tp = chThdCreateFromHeap(NULL, (size_t)stack_size, task_name,
|
||||||
rt_prio, (tfunc_t)function_pointer, NULL);
|
rt_prio, (tfunc_t)function_pointer, NULL);
|
||||||
|
@ -1325,6 +1332,15 @@ int32 OS_TaskDelete(uint32 task_id) {
|
||||||
return OS_ERR_INVALID_ID;
|
return OS_ERR_INVALID_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Asking for thread termination.*/
|
||||||
|
chThdTerminate(tp);
|
||||||
|
|
||||||
|
/* Releasing the thread reference.*/
|
||||||
|
chThdRelease(tp);
|
||||||
|
|
||||||
|
/* Waiting for termination.*/
|
||||||
|
chThdWait(tp);
|
||||||
|
|
||||||
return OS_ERR_NOT_IMPLEMENTED;
|
return OS_ERR_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1354,6 +1370,8 @@ int32 OS_TaskDelay(uint32 milli_second) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Change task priority.
|
* @brief Change task priority.
|
||||||
|
* @note Priority 255 is not available and it is transformed internally in
|
||||||
|
* 254.
|
||||||
*
|
*
|
||||||
* @param[in] task_id the task id
|
* @param[in] task_id the task id
|
||||||
* @param[in] new_priority the task new priority
|
* @param[in] new_priority the task new priority
|
||||||
|
@ -1365,11 +1383,6 @@ int32 OS_TaskSetPriority (uint32 task_id, uint32 new_priority) {
|
||||||
tprio_t rt_newprio;
|
tprio_t rt_newprio;
|
||||||
thread_t *tp = (thread_t *)task_id;
|
thread_t *tp = (thread_t *)task_id;
|
||||||
|
|
||||||
/* Check for thread validity.*/
|
|
||||||
if (chRegFindThreadByPointer(tp) == NULL) {
|
|
||||||
return OS_ERR_INVALID_ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Checking priority range.*/
|
/* Checking priority range.*/
|
||||||
if ((new_priority < MIN_PRIORITY) || (new_priority > MAX_PRIORITY)) {
|
if ((new_priority < MIN_PRIORITY) || (new_priority > MAX_PRIORITY)) {
|
||||||
return OS_ERR_INVALID_PRIORITY;
|
return OS_ERR_INVALID_PRIORITY;
|
||||||
|
@ -1377,11 +1390,19 @@ int32 OS_TaskSetPriority (uint32 task_id, uint32 new_priority) {
|
||||||
|
|
||||||
/* Converting priority to RT type.*/
|
/* Converting priority to RT type.*/
|
||||||
rt_newprio = (tprio_t)256 - (tprio_t)new_priority;
|
rt_newprio = (tprio_t)256 - (tprio_t)new_priority;
|
||||||
|
if (rt_newprio == 1) {
|
||||||
|
rt_newprio = 2;
|
||||||
|
}
|
||||||
|
|
||||||
if (chThdGetPriorityX() == rt_newprio) {
|
if (chThdGetPriorityX() == rt_newprio) {
|
||||||
return OS_SUCCESS;
|
return OS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check for thread validity.*/
|
||||||
|
if (chRegFindThreadByPointer(tp) == NULL) {
|
||||||
|
return OS_ERR_INVALID_ID;
|
||||||
|
}
|
||||||
|
|
||||||
chSysLock();
|
chSysLock();
|
||||||
|
|
||||||
/* Changing priority.*/
|
/* Changing priority.*/
|
||||||
|
@ -1420,6 +1441,9 @@ int32 OS_TaskSetPriority (uint32 task_id, uint32 new_priority) {
|
||||||
chSchRescheduleS();
|
chSchRescheduleS();
|
||||||
chSysUnlock();
|
chSysUnlock();
|
||||||
|
|
||||||
|
/* Releasing the thread reference.*/
|
||||||
|
chThdRelease(tp);
|
||||||
|
|
||||||
return OS_SUCCESS;
|
return OS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1479,6 +1503,9 @@ int32 OS_TaskGetIdByName (uint32 *task_id, const char *task_name) {
|
||||||
|
|
||||||
*task_id = (uint32)tp;
|
*task_id = (uint32)tp;
|
||||||
|
|
||||||
|
/* Releasing the thread reference.*/
|
||||||
|
chThdRelease(tp);
|
||||||
|
|
||||||
return OS_SUCCESS;
|
return OS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1486,6 +1513,8 @@ int32 OS_TaskGetIdByName (uint32 *task_id, const char *task_name) {
|
||||||
* @brief Returns task information.
|
* @brief Returns task information.
|
||||||
* @note This function can be safely called from timer callbacks or ISRs.
|
* @note This function can be safely called from timer callbacks or ISRs.
|
||||||
* @note It is not currently implemented.
|
* @note It is not currently implemented.
|
||||||
|
* @note Priority 255 is not available and it is transformed internally in
|
||||||
|
* 254.
|
||||||
*
|
*
|
||||||
* @param[in] task_id the task id
|
* @param[in] task_id the task id
|
||||||
* @param[in] task_prop task properties
|
* @param[in] task_prop task properties
|
||||||
|
@ -1497,22 +1526,25 @@ int32 OS_TaskGetInfo(uint32 task_id, OS_task_prop_t *task_prop) {
|
||||||
thread_t *tp = (thread_t *)task_id;
|
thread_t *tp = (thread_t *)task_id;
|
||||||
size_t wasize = (size_t)tp - (size_t)tp->stklimit + sizeof (thread_t);
|
size_t wasize = (size_t)tp - (size_t)tp->stklimit + sizeof (thread_t);
|
||||||
|
|
||||||
/* Check for thread validity.*/
|
|
||||||
if (chRegFindThreadByPointer(tp) == NULL) {
|
|
||||||
return OS_ERR_INVALID_ID;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* NULL pointer checks.*/
|
/* NULL pointer checks.*/
|
||||||
if (task_prop == NULL) {
|
if (task_prop == NULL) {
|
||||||
return OS_INVALID_POINTER;
|
return OS_INVALID_POINTER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check for thread validity.*/
|
||||||
|
if (chRegFindThreadByPointer(tp) == NULL) {
|
||||||
|
return OS_ERR_INVALID_ID;
|
||||||
|
}
|
||||||
|
|
||||||
strncpy(task_prop->name, tp->name, OS_MAX_API_NAME - 1);
|
strncpy(task_prop->name, tp->name, OS_MAX_API_NAME - 1);
|
||||||
task_prop->creator = (uint32)chSysGetIdleThreadX();
|
task_prop->creator = (uint32)chSysGetIdleThreadX();
|
||||||
task_prop->stack_size = (uint32)MEM_ALIGN_NEXT(wasize, PORT_STACK_ALIGN);
|
task_prop->stack_size = (uint32)MEM_ALIGN_NEXT(wasize, PORT_STACK_ALIGN);
|
||||||
task_prop->priority = (uint32)256U - (uint32)tp->realprio;
|
task_prop->priority = (uint32)256U - (uint32)tp->realprio;
|
||||||
task_prop->OStask_id = task_id;
|
task_prop->OStask_id = task_id;
|
||||||
|
|
||||||
|
/* Releasing the thread reference.*/
|
||||||
|
chThdRelease(tp);
|
||||||
|
|
||||||
return OS_SUCCESS;
|
return OS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -181,6 +181,9 @@ thread_t *chRegNextThread(thread_t *tp) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Retrieves a thread pointer by name.
|
* @brief Retrieves a thread pointer by name.
|
||||||
|
* @note The reference counter of the found thread is increased by one so
|
||||||
|
* it cannot be disposed incidentally after the pointer has been
|
||||||
|
* returned.
|
||||||
*
|
*
|
||||||
* @param[in] name the thread name
|
* @param[in] name the thread name
|
||||||
* @return A pointer to the found thread.
|
* @return A pointer to the found thread.
|
||||||
|
@ -205,6 +208,9 @@ thread_t *chRegFindThreadByName(const char *name) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Confirms that a pointer is a valid thread pointer.
|
* @brief Confirms that a pointer is a valid thread pointer.
|
||||||
|
* @note The reference counter of the found thread is increased by one so
|
||||||
|
* it cannot be disposed incidentally after the pointer has been
|
||||||
|
* returned.
|
||||||
*
|
*
|
||||||
* @param[in] tp pointer to the thread
|
* @param[in] tp pointer to the thread
|
||||||
* @return A pointer to the found thread.
|
* @return A pointer to the found thread.
|
||||||
|
|
|
@ -17,6 +17,7 @@ a series of important new features.
|
||||||
are usable by both RT and NIL.
|
are usable by both RT and NIL.
|
||||||
- Shared ports architecture. Now RTOS ports work for both RT and NIL, no
|
- Shared ports architecture. Now RTOS ports work for both RT and NIL, no
|
||||||
more duplication.
|
more duplication.
|
||||||
|
- MPU use for hardware stack checking in ARMCMx port.
|
||||||
- Enhanced shell.
|
- Enhanced shell.
|
||||||
|
|
||||||
*** What's new in RT 4.0.0 ***
|
*** What's new in RT 4.0.0 ***
|
||||||
|
@ -24,10 +25,12 @@ a series of important new features.
|
||||||
- Common ports architecture.
|
- Common ports architecture.
|
||||||
- Ability to use the new shared RTOS components.
|
- Ability to use the new shared RTOS components.
|
||||||
- Enhanced trace buffer, it is able to store events regarding not just threads
|
- Enhanced trace buffer, it is able to store events regarding not just threads
|
||||||
but also IRQs, halts and user events.
|
but also IRQs, halts and user events. The trace record now stores both the
|
||||||
|
"slow" system time and a RT stamp for increased accuracy.
|
||||||
- Enhanced Registry, it is now possible to find threads by name or by pointer.
|
- Enhanced Registry, it is now possible to find threads by name or by pointer.
|
||||||
- New threading API, now creating static threads is even faster.
|
- New threading API, now creating static threads is even faster.
|
||||||
- Extended priority range to 1..255.
|
- Extended priority range to 1..255.
|
||||||
|
- New kernel hooks for a more flexible code instrumentation.
|
||||||
- Experimental NASA OSAL implementation.
|
- Experimental NASA OSAL implementation.
|
||||||
|
|
||||||
*** What's new in HAL 4.1.0 ***
|
*** What's new in HAL 4.1.0 ***
|
||||||
|
@ -38,4 +41,4 @@ a series of important new features.
|
||||||
- Common ports architecture.
|
- Common ports architecture.
|
||||||
- Ability to use the new shared RTOS components.
|
- Ability to use the new shared RTOS components.
|
||||||
- State checker.
|
- State checker.
|
||||||
- Parameter checks.
|
- Parameters checks.
|
||||||
|
|
Loading…
Reference in New Issue