|
- /*
- ************************************************************************************************************************
- * uC/OS-III
- * The Real-Time Kernel
- *
- * (c) Copyright 2009-2014; Micrium, Inc.; Weston, FL
- * All rights reserved. Protected by international copyright laws.
- *
- * PRIORITY MANAGEMENT
- *
- * File : OS_PRIO.C
- * By : JJL
- * Version : V3.04.04
- *
- * LICENSING TERMS:
- * ---------------
- * uC/OS-III is provided in source form for FREE short-term evaluation, for educational use or
- * for peaceful research. If you plan or intend to use uC/OS-III in a commercial application/
- * product then, you need to contact Micrium to properly license uC/OS-III for its use in your
- * application/product. We provide ALL the source code for your convenience and to help you
- * experience uC/OS-III. The fact that the source is provided does NOT mean that you can use
- * it commercially without paying a licensing fee.
- *
- * Knowledge of the source code may NOT be used to develop a similar product.
- *
- * Please help us continue to provide the embedded community with the finest software available.
- * Your honesty is greatly appreciated.
- *
- * You can find our product's user manual, API reference, release notes and
- * more information at https://doc.micrium.com.
- * You can contact us at www.micrium.com.
- ************************************************************************************************************************
- */
-
- #define MICRIUM_SOURCE
- #include "os.h"
-
- #ifdef VSC_INCLUDE_SOURCE_FILE_NAMES
- const CPU_CHAR *os_prio__c = "$Id: $";
- #endif
-
-
- CPU_DATA OSPrioTbl[OS_PRIO_TBL_SIZE]; /* Declare the array local to this file to allow for ... */
- /* ... optimization. In other words, this allows the ... */
- /* ... table to be located in fast memory */
-
- /*
- ************************************************************************************************************************
- * INITIALIZE THE PRIORITY LIST
- *
- * Description: This function is called by uC/OS-III to initialize the list of ready priorities.
- *
- * Arguments : none
- *
- * Returns : none
- *
- * Note : This function is INTERNAL to uC/OS-III and your application should not call it.
- ************************************************************************************************************************
- */
-
- void OS_PrioInit (void)
- {
- CPU_DATA i;
-
-
- /* Clear the bitmap table ... no task is ready */
- for (i = 0u; i < OS_PRIO_TBL_SIZE; i++) {
- OSPrioTbl[i] = (CPU_DATA)0;
- }
- }
-
- /*
- ************************************************************************************************************************
- * GET HIGHEST PRIORITY TASK WAITING
- *
- * Description: This function is called by other uC/OS-III services to determine the highest priority task
- * waiting on the event.
- *
- * Arguments : none
- *
- * Returns : The priority of the Highest Priority Task (HPT) waiting for the event
- *
- * Note(s) : 1) This function is INTERNAL to uC/OS-III and your application MUST NOT call it.
- ************************************************************************************************************************
- */
-
- OS_PRIO OS_PrioGetHighest (void)
- {
- CPU_DATA *p_tbl;
- OS_PRIO prio;
-
-
- prio = (OS_PRIO)0;
- p_tbl = &OSPrioTbl[0];
- while (*p_tbl == (CPU_DATA)0) { /* Search the bitmap table for the highest priority */
- prio += DEF_INT_CPU_NBR_BITS; /* Compute the step of each CPU_DATA entry */
- p_tbl++;
- }
- prio += (OS_PRIO)CPU_CntLeadZeros(*p_tbl); /* Find the position of the first bit set at the entry */
- return (prio);
- }
-
- /*
- ************************************************************************************************************************
- * INSERT PRIORITY
- *
- * Description: This function is called to insert a priority in the priority table.
- *
- * Arguments : prio is the priority to insert
- *
- * Returns : none
- *
- * Note(s) : 1) This function is INTERNAL to uC/OS-III and your application MUST NOT call it.
- ************************************************************************************************************************
- */
-
- void OS_PrioInsert (OS_PRIO prio)
- {
- CPU_DATA bit;
- CPU_DATA bit_nbr;
- OS_PRIO ix;
-
-
- ix = prio / DEF_INT_CPU_NBR_BITS;
- bit_nbr = (CPU_DATA)prio & (DEF_INT_CPU_NBR_BITS - 1u);
- bit = 1u;
- bit <<= (DEF_INT_CPU_NBR_BITS - 1u) - bit_nbr;
- OSPrioTbl[ix] |= bit;
- }
-
- /*
- ************************************************************************************************************************
- * REMOVE PRIORITY
- *
- * Description: This function is called to remove a priority in the priority table.
- *
- * Arguments : prio is the priority to remove
- *
- * Returns : none
- *
- * Note(s) : 1) This function is INTERNAL to uC/OS-III and your application MUST NOT call it.
- ************************************************************************************************************************
- */
-
- void OS_PrioRemove (OS_PRIO prio)
- {
- CPU_DATA bit;
- CPU_DATA bit_nbr;
- OS_PRIO ix;
-
-
- ix = prio / DEF_INT_CPU_NBR_BITS;
- bit_nbr = (CPU_DATA)prio & (DEF_INT_CPU_NBR_BITS - 1u);
- bit = 1u;
- bit <<= (DEF_INT_CPU_NBR_BITS - 1u) - bit_nbr;
- OSPrioTbl[ix] &= ~bit;
- }
|