repair the task shcedule failed problem of arm,update the assign task before pendsv fault

This commit is contained in:
Wang_Weigen 2022-06-22 14:57:25 +08:00
parent 1f5d4ac765
commit 517825a52f
6 changed files with 21 additions and 11 deletions

View File

@ -76,7 +76,6 @@ PendSV_Handler:
MOV R7, R11
STMIA R1!, {R4 - R7} /* push thread {R8 - R11} high register to thread stack */
switch_to_task:
BL UpdateRunningTask
LDR R1, =InterruptToKtask
LDR R1, [R1]

View File

@ -70,9 +70,6 @@ PendSV_Handler:
switch_to_task:
PUSH {lr}
BL UpdateRunningTask
POP {lr}
#ifdef TASK_ISOLATION
PUSH {lr}

View File

@ -95,7 +95,7 @@ uint16 GetOsAssignLockLevel(void)
#include <xs_hook.h>
static int16 KTaskOsAssignLockNest;
static uint16 KTaskOsAssignLockNest;
/**
* This function will get critical lock level.

View File

@ -87,6 +87,7 @@ SWITCH:
Assign.ready_vector_done->remove(new_task);
KTaskStatSetAsRunning(new_task);
Assign.os_running_task = new_task;
SYS_KDEBUG_LOG(KDBG_SCHED,
("[%d]switch to priority#%d "
@ -162,6 +163,7 @@ SWITCH:
Assign.ready_vector_done->remove(new_task);
KTaskStatSetAsRunning(new_task);
Assign.os_running_task = new_task;
SYS_KDEBUG_LOG(KDBG_SCHED,
("[%d]switch to priority#%d "
@ -327,6 +329,7 @@ x_err_t YieldOsAssign(void)
Assign.ready_vector_done->remove(new_task);
KTaskStatSetAsRunning(new_task);
Assign.os_running_task = new_task;
SYS_KDEBUG_LOG(KDBG_SCHED,
("[%d]switch to priority#%d "

View File

@ -1647,9 +1647,17 @@ void shellTask(void *param)
while(RET_TRUE)
{
if (shell->read) {
memset(data, 0, KEY_LENGTH);
data_len = 0;
x_base lock;
data_len = shell->read(data);
for (i = 0; i < data_len; i++) {
shellHandler(shell, data[i]);
if(data_len > 0) {
int lock = CriticalAreaLock();
for (i = 0; i < data_len; i++) {
shellHandler(shell, data[i]);
}
CriticalAreaUnLock(lock);
}
}
}

View File

@ -48,10 +48,13 @@ signed char userShellRead(char *data)
{
char read_length = 0;
struct BusBlockReadParam read_param;
read_param.read_length = 0;
read_param.size = 1;
read_param.buffer = data;
memset(&read_param,0, sizeof(read_param));
read_param.read_length = 0;
read_param.size = KEY_LENGTH;
read_param.buffer = data;
BusDevReadData(console, &read_param);
read_length = (char)read_param.read_length;
@ -120,7 +123,7 @@ int userShellInit(void)
tid = KTaskCreate("letter-shell",
shellTask, &shell,
SHELL_TASK_STACK_SIZE, SHELL_TASK_PRIORITY);
StartupKTask(tid);
return 0;
}