diff --git a/arch/arm/arm/src/los_dispatch.S b/arch/arm/arm/src/los_dispatch.S index 6c56620b9f74b6caf441ff4fb25729c74c9e6456..59727453fee1fb1272e31e38cd9a8cdd265bb052 100644 --- a/arch/arm/arm/src/los_dispatch.S +++ b/arch/arm/arm/src/los_dispatch.S @@ -31,7 +31,39 @@ #include "asm.h" #include "arch_config.h" - +/****************************************************************************** +ARM的指令系统中关于栈指令的内容比较容易引起迷惑,这是因为准确描述一个栈的特点需要两个参数: + 栈地址的增长方向:ARM将向高地址增长的栈称为递增栈(Descendent Stack), + 将向低地址增长的栈称为递减栈(Acendant Stack) + 栈指针的指向位置:ARM将栈指针指向栈顶元素位置的栈称为满栈(Full Stack), + 将栈指针指向即将入栈的元素位置的栈称为空栈(Empty Stack) + +栈类型 + 根据栈地址增长方向雨栈指针指向位置的不同,自然可以将栈分为四类: + + 递增栈 递减栈 + 空栈 EA栈 ED栈 + 满栈 FA栈 FD栈 + +栈指令 + 栈的操作指令无非两种:入栈和出栈,由于ARM描述了四种不同类型的栈,因此对应的栈指令一共有8条。 + + 入栈 出栈 + EA栈 STMEA LDMEA + ED栈 STMED LDMED + FA栈 STMFA LDMFA + FD栈 STMFD LDMFD + + 这些指令具有相似的前缀: + STM:(STore Multiple data)表示存储数据,即入栈。 + LDM:(LoaD Multiple data)表示加载数据,即出栈。 + 一般情况下,可以将栈操作指令分解为两步微指令:数据存取和栈指针移动。这两步操作的先后顺序和栈指针的移动方式由栈的类型决定。 + STMFD SP减少 写[SP] STMDB + LDMFD 读[SP] SP增加 LDMIA + +参考 + https://www.cnblogs.com/fanzhidongyzby/p/5250116.html +******************************************************************************/ #ifdef LOSCFG_KERNEL_SMP_LOCKDEP .extern OsLockDepCheckOut/*使用外部定义的函数*/ #endif diff --git a/kernel/base/include/los_task_pri.h b/kernel/base/include/los_task_pri.h index 58dfd9b0736f1e91eccad13d4b44680ee2aa27e2..6748e5990acf9a736a46b850183e210ba66f4f38 100644 --- a/kernel/base/include/los_task_pri.h +++ b/kernel/base/include/los_task_pri.h @@ -121,7 +121,7 @@ extern SPIN_LOCK_S g_taskSpin;//任务自旋锁 * * The task is suspended. */ -#define OS_TASK_STATUS_SUSPEND 0x0008U +#define OS_TASK_STATUS_SUSPEND 0x0008U //挂起状态 /** * @ingroup los_task @@ -129,7 +129,7 @@ extern SPIN_LOCK_S g_taskSpin;//任务自旋锁 * * The task is blocked. */ -#define OS_TASK_STATUS_PEND 0x0010U +#define OS_TASK_STATUS_PEND 0x0010U //阻塞状态 /** * @ingroup los_task @@ -137,7 +137,7 @@ extern SPIN_LOCK_S g_taskSpin;//任务自旋锁 * * The task is delayed. */ -#define OS_TASK_STATUS_DELAY 0x0020U +#define OS_TASK_STATUS_DELAY 0x0020U //延期状态 /** * @ingroup los_task diff --git a/zzz/git/push.sh b/zzz/git/push.sh index 1d88abb84833532cd707a3c1137f96a209bb981b..dff9d38cbca8383ec5c10f754d736995842b11a5 100644 --- a/zzz/git/push.sh +++ b/zzz/git/push.sh @@ -1,5 +1,5 @@ git add -A -git commit -m '初始化硬时钟. +git commit -m '鸿蒙用栈方式为:递减满栈(FD), 栈的操作指令为:STMFD,LDMFD 搜索 @note_pic 可查看绘制的全部字符图 搜索 @note_why 是尚未看明白的地方,有看明白的,请Pull Request完善 搜索 @note_thinking 是一些的思考和建议 diff --git a/zzz/pic/other/wecode10.jpg b/zzz/pic/other/wecode10.jpg new file mode 100644 index 0000000000000000000000000000000000000000..95837b44da4de221a512aa44f698a900622a6440 Binary files /dev/null and b/zzz/pic/other/wecode10.jpg differ diff --git a/zzz/pic/other/wecode15.jpg b/zzz/pic/other/wecode15.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ee6b2948cdb0342c48e34e99eb098a8344f4061 Binary files /dev/null and b/zzz/pic/other/wecode15.jpg differ diff --git a/zzz/pic/other/wecode25.jpg b/zzz/pic/other/wecode25.jpg new file mode 100644 index 0000000000000000000000000000000000000000..19210a75af4d0b8fd14d7456026d5813ffa4cd10 Binary files /dev/null and b/zzz/pic/other/wecode25.jpg differ diff --git a/zzz/pic/other/wecode8.jpg b/zzz/pic/other/wecode8.jpg index dee9ad21b6d7fb6f15f4a711514512d066047655..e854f982fd866b601957ffee8c34de1feca532db 100644 Binary files a/zzz/pic/other/wecode8.jpg and b/zzz/pic/other/wecode8.jpg differ diff --git a/zzz/pic/other/wxcode5.jpg b/zzz/pic/other/wxcode5.jpg index 8de0e8c7bc700af946f945e32ee13943b46cc876..b8bf9909c99a559a7de0c8b2fab7727ba7f7eacf 100644 Binary files a/zzz/pic/other/wxcode5.jpg and b/zzz/pic/other/wxcode5.jpg differ