[HUST CSE] Fixed memory leak and type conversion issues
This commit is contained in:
@@ -122,36 +122,36 @@ void sys_sem_set_invalid(sys_sem_t *sem)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
<20><><EFBFBD><EFBFBD>timeout<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>㣬<EFBFBD><EFBFBD>ֵΪ
|
<20><><EFBFBD>timeout<75><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>㣬<EFBFBD><EFBFBD>ֵΪ
|
||||||
<20>ȴ<EFBFBD><C8B4>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѵĺ<D1B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
<20>ȴ<EFBFBD><C8B4>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѵĺ<D1B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
<20>ź<EFBFBD><C5BA><EFBFBD>δ<EFBFBD><CEB4>ָ<EFBFBD><D6B8>ʱ<EFBFBD><CAB1><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD>źţ<C5BA><C5A3><EFBFBD><EFBFBD><EFBFBD>ֵΪ
|
<20>ź<EFBFBD><C5BA><EFBFBD>δ<EFBFBD><CEB4>ָ<EFBFBD><D6B8>ʱ<EFBFBD><CAB1><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD>źţ<C5BA><C5A3><EFBFBD><EFBFBD><EFBFBD>ֵΪ
|
||||||
SYS_ARCH_TIMEOUT<55><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̲߳<EFBFBD><EFBFBD>صȴ<EFBFBD><EFBFBD>ź<EFBFBD><EFBFBD><EFBFBD>
|
SYS_ARCH_TIMEOUT<55><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̲߳<DFB3><CCB2>صȴ<D8B5><C8B4>ź<EFBFBD><C5BA><EFBFBD>
|
||||||
<20>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㡣 */
|
<20>ú<EFBFBD><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㡣 */
|
||||||
u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout)
|
u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout)
|
||||||
{
|
{
|
||||||
k_tick_t wait_tick = 0;
|
k_tick_t wait_tick = 0;
|
||||||
k_tick_t start_tick = 0;
|
k_tick_t start_tick = 0;
|
||||||
|
|
||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
||||||
if (sem == SYS_SEM_NULL) {
|
if (sem == SYS_SEM_NULL) {
|
||||||
return SYS_ARCH_TIMEOUT;
|
return SYS_ARCH_TIMEOUT;
|
||||||
}
|
}
|
||||||
|
|
||||||
//<2F><><EFBFBD>Ȼ<EFBFBD>ȡ<EFBFBD><C8A1>ʼ<EFBFBD>ȴ<EFBFBD><C8B4>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
|
//<2F><><EFBFBD>Ȼ<EFBFBD>ȡ<EFBFBD><C8A1>ʼ<EFBFBD>ȴ<EFBFBD><C8B4>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
|
||||||
start_tick = sys_now();
|
start_tick = sys_now();
|
||||||
|
|
||||||
//timeout != 0<><30><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ms<6D><73><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3>ʱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
|
//timeout != 0<><30><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ms<6D><73><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3>ʱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
|
||||||
if (timeout != 0) {
|
if (timeout != 0) {
|
||||||
//<2F><>msת<73><D7AA><EFBFBD><EFBFBD>ʱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
|
//<2F><>msת<73><D7AA><EFBFBD><EFBFBD>ʱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
|
||||||
wait_tick = timeout / (1000 / TOS_CFG_CPU_TICK_PER_SECOND);
|
wait_tick = timeout / (1000 / TOS_CFG_CPU_TICK_PER_SECOND);
|
||||||
if (wait_tick == 0) {
|
if (wait_tick == 0) {
|
||||||
wait_tick = 1;
|
wait_tick = 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
wait_tick = TOS_TIME_FOREVER; //һֱ<D2BB><D6B1><EFBFBD><EFBFBD>
|
wait_tick = TOS_TIME_FOREVER; //һֱ<D2BB><D6B1><EFBFBD><EFBFBD>
|
||||||
}
|
}
|
||||||
|
|
||||||
//<2F>ȴ<EFBFBD><C8B4>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>ʾ<EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD>ʱ
|
//<2F>ȴ<EFBFBD><C8B4>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>ʱ<EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD>ͱ<EFBFBD>ʾ<EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>ʱ
|
||||||
if (tos_sem_pend(sem, wait_tick) == K_ERR_NONE) {
|
if (tos_sem_pend(sem, wait_tick) == K_ERR_NONE) {
|
||||||
return ((sys_now() - start_tick) * (1000 / TOS_CFG_CPU_TICK_PER_SECOND));
|
return ((sys_now() - start_tick) * (1000 / TOS_CFG_CPU_TICK_PER_SECOND));
|
||||||
}
|
}
|
||||||
@@ -224,17 +224,20 @@ sys_thread_t sys_thread_new(const char *name, lwip_thread_fn function, void *arg
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
task_stack = tos_mmheap_alloc(stacksize);
|
task_stack = (k_stack_t *)tos_mmheap_alloc(stacksize);
|
||||||
if (!task_stack) {
|
if (!task_stack) {
|
||||||
printf("[sys_arch]:memalloc task stack fail!\n");
|
printf("[sys_arch]:memalloc task stack fail!\n");
|
||||||
|
tos_mmheap_free(task);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* <20><><EFBFBD><EFBFBD>MidPriority_Task<73><6B><EFBFBD><EFBFBD> */
|
/* <20><><EFBFBD><EFBFBD>MidPriority_Task<73><6B><EFBFBD><EFBFBD> */
|
||||||
rc = tos_task_create(task, (char*)name, function, arg,
|
rc = tos_task_create(task, (char*)name, function, arg,
|
||||||
prio, task_stack, stacksize, 20);
|
prio, task_stack, stacksize, 20);
|
||||||
if (rc != K_ERR_NONE) {
|
if (rc != K_ERR_NONE) {
|
||||||
printf("[sys_arch]:create task fail! code: %d \r\n", rc);
|
printf("[sys_arch]:create task fail! code: %d \r\n", rc);
|
||||||
|
tos_mmheap_free(task);
|
||||||
|
tos_mmheap_free(task_stack);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -310,25 +313,25 @@ u32_t sys_arch_mbox_fetch(sys_mbox_t *q, void **msg, u32_t timeout)
|
|||||||
k_tick_t wait_tick = 0;
|
k_tick_t wait_tick = 0;
|
||||||
k_tick_t start_tick = 0;
|
k_tick_t start_tick = 0;
|
||||||
|
|
||||||
if (!msg) { // <20><><EFBFBD><EFBFBD><EFBFBD>洢<EFBFBD><E6B4A2>Ϣ<EFBFBD>ĵط<C4B5><D8B7>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
if (!msg) { // <20><><EFBFBD><EFBFBD><EFBFBD>洢<EFBFBD><E6B4A2>Ϣ<EFBFBD>ĵط<C4B5><D8B7>Ƿ<EFBFBD><C7B7><EFBFBD>Ч
|
||||||
msg = &dummyptr;
|
msg = &dummyptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
// <20><><EFBFBD>Ȼ<EFBFBD>ȡ<EFBFBD><C8A1>ʼ<EFBFBD>ȴ<EFBFBD><C8B4>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
|
// <20><><EFBFBD>Ȼ<EFBFBD>ȡ<EFBFBD><C8A1>ʼ<EFBFBD>ȴ<EFBFBD><C8B4>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
|
||||||
start_tick = sys_now();
|
start_tick = sys_now();
|
||||||
|
|
||||||
// timeout != 0<><30><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ms<6D><73><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3>ʱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
|
// timeout != 0<><30><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>ms<6D><73><EFBFBD><EFBFBD>ϵͳ<CFB5><CDB3>ʱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
|
||||||
if (timeout != 0) {
|
if (timeout != 0) {
|
||||||
//<2F><>msת<73><D7AA><EFBFBD><EFBFBD>ʱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
|
//<2F><>msת<73><D7AA><EFBFBD><EFBFBD>ʱ<EFBFBD>ӽ<EFBFBD><D3BD><EFBFBD>
|
||||||
wait_tick = timeout / (1000 / TOS_CFG_CPU_TICK_PER_SECOND);
|
wait_tick = timeout / (1000 / TOS_CFG_CPU_TICK_PER_SECOND);
|
||||||
if (wait_tick == 0) {
|
if (wait_tick == 0) {
|
||||||
wait_tick = 1;
|
wait_tick = 1;
|
||||||
}
|
}
|
||||||
} else { // һֱ<D2BB><D6B1><EFBFBD><EFBFBD>
|
} else { // һֱ<D2BB><D6B1><EFBFBD><EFBFBD>
|
||||||
wait_tick = TOS_TIME_FOREVER;
|
wait_tick = TOS_TIME_FOREVER;
|
||||||
}
|
}
|
||||||
|
|
||||||
// <20>ȴ<EFBFBD><C8B4>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>䣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>ʾ<EFBFBD>ȴ<EFBFBD><EFBFBD><EFBFBD>ʱ
|
// <20>ȴ<EFBFBD><C8B4>ɹ<EFBFBD><C9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>ʱ<EFBFBD>䣬<EFBFBD><E4A3AC><EFBFBD><EFBFBD>ͱ<EFBFBD>ʾ<EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>ʱ
|
||||||
if (tos_msg_q_pend(q,&(*msg), wait_tick) == K_ERR_NONE) {
|
if (tos_msg_q_pend(q,&(*msg), wait_tick) == K_ERR_NONE) {
|
||||||
return ((sys_now() - start_tick) * (1000 / TOS_CFG_CPU_TICK_PER_SECOND));
|
return ((sys_now() - start_tick) * (1000 / TOS_CFG_CPU_TICK_PER_SECOND));
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user