forked from chos/crtos
Compare commits
10 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
7facc4fece | |
|
|
8dfe689f3a | |
|
|
2fd6d03326 | |
|
|
ee2004f5aa | |
|
|
5dcb8db2f7 | |
|
|
9e2efde7d9 | |
|
|
ce40feef0e | |
|
|
022b34c2ba | |
|
|
0f4bb95ad4 | |
|
|
e04f415e66 |
|
|
@ -881,6 +881,11 @@ 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,8 +379,13 @@ 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,35 +157,33 @@ static AvlNodeType AvlTreeSetRLRotate(AvlNodeType avl_node)
|
|||
*/
|
||||
static AvlNodeType AvlTreeBalance(AvlNodeType avl_node)
|
||||
{
|
||||
if(avl_node)
|
||||
{
|
||||
AvlNodeType new_node = NONE;
|
||||
uint32 avlnode_BF = AVL_ABS(AvlTreeGetNodeBalanceFactor(avl_node));
|
||||
int32 bf = 0;
|
||||
int32 child_bf = 0;
|
||||
|
||||
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 {
|
||||
if (avl_node == NONE)
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -202,7 +200,6 @@ 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,7 +253,6 @@ 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;
|
||||
}
|
||||
|
||||
|
|
@ -262,7 +261,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->data_buffer);
|
||||
x_free(circular_area);
|
||||
return NONE;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ static struct IdNode *GetObj(struct IdManager *manager, uint16 id)
|
|||
return idnode;
|
||||
}
|
||||
|
||||
static struct IdNode *RemoveObj(struct IdManager *manager, struct IdNode *idnode)
|
||||
static void RemoveObj(struct IdManager *manager, struct IdNode *idnode)
|
||||
{
|
||||
NULL_PARAM_CHECK(manager);
|
||||
NULL_PARAM_CHECK(idnode);
|
||||
|
|
|
|||
|
|
@ -107,15 +107,11 @@ 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;
|
||||
|
|
@ -214,11 +210,6 @@ 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,6 +177,10 @@ static int32 _SemaphoreAbandon(int32 id)
|
|||
resched = 1;
|
||||
LinklistResume(&sem->pend_list);
|
||||
} else {
|
||||
if (sem->value == UINT16_MAX) {
|
||||
CriticalAreaUnLock(lock);
|
||||
return -EFULL;
|
||||
}
|
||||
sem->value++;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -474,8 +474,13 @@ 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