forked from xuos/xiuos
Compare commits
No commits in common. "master" and "master" have entirely different histories.
|
|
@ -881,11 +881,6 @@ void ExtSramInitBoardMemory(void* start_phy_address, void* end_phy_address, uint
|
|||
NULL_PARAM_CHECK(start_phy_address);
|
||||
NULL_PARAM_CHECK(end_phy_address);
|
||||
|
||||
if (extsram_idx >= EXTSRAM_MAX_NUM) {
|
||||
KPrintf("ExtSramInitBoardMemory, invalid extsram_idx %u\n", extsram_idx);
|
||||
return;
|
||||
}
|
||||
|
||||
KDEBUG_NOT_IN_INTERRUPT;
|
||||
struct DynamicBuddyMemory* uheap = &ExtByteManager[extsram_idx].dynamic_buddy_manager;
|
||||
|
||||
|
|
|
|||
|
|
@ -379,13 +379,8 @@ void StartupOsAssign(void)
|
|||
*
|
||||
* system OsAssign init function
|
||||
*/
|
||||
extern void __init_ssp(void *);
|
||||
|
||||
void SysInitOsAssign(void)
|
||||
{
|
||||
/* Initialize SSP canary before tasks run; NULL uses address-based fallback */
|
||||
__init_ssp(NONE);
|
||||
|
||||
SYS_KDEBUG_LOG(KDBG_SCHED, ("start Os Assign: max priority 0x%02x\n",
|
||||
KTASK_PRIORITY_MAX));
|
||||
|
||||
|
|
|
|||
|
|
@ -157,33 +157,35 @@ static AvlNodeType AvlTreeSetRLRotate(AvlNodeType avl_node)
|
|||
*/
|
||||
static AvlNodeType AvlTreeBalance(AvlNodeType avl_node)
|
||||
{
|
||||
int32 bf = 0;
|
||||
int32 child_bf = 0;
|
||||
if(avl_node)
|
||||
{
|
||||
AvlNodeType new_node = NONE;
|
||||
uint32 avlnode_BF = AVL_ABS(AvlTreeGetNodeBalanceFactor(avl_node));
|
||||
|
||||
if (avl_node == NONE)
|
||||
if(avlnode_BF > 1) {
|
||||
if(AvlTreeGetNodeBalanceFactor(avl_node->left) > 0) {
|
||||
/*LL case*/
|
||||
new_node = AvlTreeSetRightRotate(avl_node);
|
||||
} else if(AvlTreeGetNodeBalanceFactor(avl_node->left) < 0) {
|
||||
/*LR case*/
|
||||
new_node = AvlTreeSetLRRotate(avl_node);
|
||||
} else if(AvlTreeGetNodeBalanceFactor(avl_node->right) < 0) {
|
||||
/*RR case*/
|
||||
new_node = AvlTreeSetLeftRotate(avl_node);
|
||||
} else if(AvlTreeGetNodeBalanceFactor(avl_node->right) > 0) {
|
||||
/*RL case*/
|
||||
new_node = AvlTreeSetRLRotate(avl_node);
|
||||
}
|
||||
} else {
|
||||
/*the avl tree is balanced, no need to rebalance*/
|
||||
new_node = avl_node;
|
||||
}
|
||||
|
||||
return new_node;
|
||||
|
||||
} else {
|
||||
return NONE;
|
||||
|
||||
bf = AvlTreeGetNodeBalanceFactor(avl_node);
|
||||
|
||||
if (bf > 1) {
|
||||
/* Left-heavy: LL (incl. left BF == 0 after delete) or LR */
|
||||
child_bf = AvlTreeGetNodeBalanceFactor(avl_node->left);
|
||||
if (child_bf >= 0)
|
||||
return AvlTreeSetRightRotate(avl_node);
|
||||
else
|
||||
return AvlTreeSetLRRotate(avl_node);
|
||||
}
|
||||
|
||||
if (bf < -1) {
|
||||
/* Right-heavy: RR (incl. right BF == 0 after delete) or RL */
|
||||
child_bf = AvlTreeGetNodeBalanceFactor(avl_node->right);
|
||||
if (child_bf <= 0)
|
||||
return AvlTreeSetLeftRotate(avl_node);
|
||||
else
|
||||
return AvlTreeSetRLRotate(avl_node);
|
||||
}
|
||||
|
||||
return avl_node;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -200,6 +202,7 @@ AvlNodeType AvlTreeInsertNode(AvlNodeType avl_node, int32 data)
|
|||
new_node = x_malloc(sizeof(struct AvlNode));
|
||||
if(NONE == new_node) {
|
||||
KPrintf("AvlTreeInsertNode malloc AvlNode failed\n");
|
||||
x_free(new_node);
|
||||
return NONE;
|
||||
}
|
||||
new_node->data = data;
|
||||
|
|
|
|||
|
|
@ -253,6 +253,7 @@ CircularAreaType CircularAreaInit(uint32 circular_area_length)
|
|||
CircularAreaType circular_area = x_malloc(sizeof(struct CircularArea));
|
||||
if(NONE == circular_area) {
|
||||
KPrintf("CircularAreaInit malloc struct circular_area failed\n");
|
||||
x_free(circular_area);
|
||||
return NONE;
|
||||
}
|
||||
|
||||
|
|
@ -261,7 +262,7 @@ CircularAreaType CircularAreaInit(uint32 circular_area_length)
|
|||
circular_area->data_buffer = x_malloc(circular_area_length);
|
||||
if(NONE == circular_area->data_buffer) {
|
||||
KPrintf("CircularAreaInit malloc circular_area data_buffer failed\n");
|
||||
x_free(circular_area);
|
||||
x_free(circular_area->data_buffer);
|
||||
return NONE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ static struct IdNode *GetObj(struct IdManager *manager, uint16 id)
|
|||
return idnode;
|
||||
}
|
||||
|
||||
static void RemoveObj(struct IdManager *manager, struct IdNode *idnode)
|
||||
static struct IdNode *RemoveObj(struct IdManager *manager, struct IdNode *idnode)
|
||||
{
|
||||
NULL_PARAM_CHECK(manager);
|
||||
NULL_PARAM_CHECK(idnode);
|
||||
|
|
|
|||
|
|
@ -107,11 +107,15 @@ static x_err_t _MsgQueueSend(struct MsgQueue* mq,
|
|||
timeout = CalculateTickFromTimeMs(msec);
|
||||
|
||||
lock = CriticalAreaLock();
|
||||
if (mq->num_msgs >= mq->max_msgs && timeout == 0) {
|
||||
CriticalAreaUnLock(lock);
|
||||
return -EFULL;
|
||||
}
|
||||
|
||||
while (mq->num_msgs >= mq->max_msgs) {
|
||||
task->exstatus = EOK;
|
||||
if (timeout == 0) {
|
||||
CriticalAreaUnLock(lock);
|
||||
task->exstatus = -EFULL;
|
||||
return -EFULL;
|
||||
}
|
||||
KDEBUG_IN_KTASK_CONTEXT;
|
||||
|
|
@ -210,6 +214,11 @@ static x_err_t _MsgQueueRecv(struct MsgQueue* mq,
|
|||
timeout = CalculateTickFromTimeMs(msec);
|
||||
|
||||
lock = CriticalAreaLock();
|
||||
if (timeout == 0 && mq->num_msgs <= 0) {
|
||||
CriticalAreaUnLock(lock);
|
||||
return -ETIMEOUT;
|
||||
}
|
||||
|
||||
while (mq->num_msgs <= 0) {
|
||||
KDEBUG_IN_KTASK_CONTEXT;
|
||||
|
||||
|
|
|
|||
|
|
@ -177,10 +177,6 @@ static int32 _SemaphoreAbandon(int32 id)
|
|||
resched = 1;
|
||||
LinklistResume(&sem->pend_list);
|
||||
} else {
|
||||
if (sem->value == UINT16_MAX) {
|
||||
CriticalAreaUnLock(lock);
|
||||
return -EFULL;
|
||||
}
|
||||
sem->value++;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -474,13 +474,8 @@ void StartupOsAssign(void)
|
|||
*
|
||||
* system OsAssign init function
|
||||
*/
|
||||
extern void __init_ssp(void *);
|
||||
|
||||
void SysInitOsAssign(void)
|
||||
{
|
||||
/* Initialize SSP canary before tasks run; NULL uses address-based fallback */
|
||||
__init_ssp(NONE);
|
||||
|
||||
SYS_KDEBUG_LOG(KDBG_SCHED, ("start Os Assign: max priority 0x%02x\n",
|
||||
KTASK_PRIORITY_MAX));
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue