更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
los_hw_cpu.h 文件参考

浏览源代码.

函数

STATIC INLINE VOID * ArchCurrTaskGet (VOID)
 获取当前task的地址 更多...
 
STATIC INLINE VOID ArchCurrTaskSet (VOID *val)
 向CP15 - > C13 保存当前任务的地址 更多...
 
STATIC INLINE VOID ArchCurrUserTaskSet (UINTPTR val)
 向协处理器写入用户态任务ID TPIDRURO 仅用于用户态 更多...
 
STATIC INLINE UINT32 ArchCurrCpuid (VOID)
 
STATIC INLINE UINT64 OsHwIDGet (VOID)
 获取CPU硬件ID,每个CPU都有自己的唯一标识 更多...
 
STATIC INLINE UINT32 OsMainIDGet (VOID)
 获取CPU型号,包含CPU各种信息,例如:[15:4]表示 arm 7或arm 9 更多...
 
STATIC INLINE UINT32 ArchIntLock (VOID)
 禁止中断 更多...
 
STATIC INLINE UINT32 ArchIntUnlock (VOID)
 打开当前处理器所有中断响应 更多...
 
STATIC INLINE VOID ArchIrqDisable (VOID)
 
STATIC INLINE VOID ArchIrqEnable (VOID)
 
STATIC INLINE VOID ArchIntRestore (UINT32 intSave)
 恢复到使用LOS_IntLock关闭所有中断之前的状态 更多...
 
STATIC INLINE UINT32 OsIntLocked (VOID)
 关闭当前处理器所有中断响应 更多...
 
STATIC INLINE UINT32 ArchSPGet (VOID)
 

函数说明

◆ ArchCurrCpuid()

STATIC INLINE UINT32 ArchCurrCpuid ( VOID  )

https://www.keil.com/pack/doc/cmsis/Core_A/html/group__CMSIS__MPIDR.html 在多处理器系统中,MPIDR为调度目的提供额外的处理器标识机制,并指示实现是否包括多处理器扩展。

在文件 los_hw_cpu.h168 行定义.

169{
170#ifdef LOSCFG_KERNEL_SMP
171 return ARM_SYSREG_READ(MPIDR) & MPIDR_CPUID_MASK;
172#else//ARM架构通过MPIDR(Multiprocessor Affinity Register)寄存器给每个CPU指定一个逻辑地址。
173 return 0;
174#endif
175}

◆ ArchCurrTaskGet()

STATIC INLINE VOID * ArchCurrTaskGet ( VOID  )

获取当前task的地址

在文件 los_hw_cpu.h150 行定义.

151{
152 return (VOID *)(UINTPTR)ARM_SYSREG_READ(TPIDRPRW);//读c13寄存器
153}
unsigned long UINTPTR
Definition: los_typedef.h:68
这是这个函数的调用关系图:

◆ ArchCurrTaskSet()

STATIC INLINE VOID ArchCurrTaskSet ( VOID *  val)

向CP15 - > C13 保存当前任务的地址

在文件 los_hw_cpu.h155 行定义.

156{
157 ARM_SYSREG_WRITE(TPIDRPRW, (UINT32)(UINTPTR)val);
158}
unsigned int UINT32
Definition: los_typedef.h:57
这是这个函数的调用关系图:

◆ ArchCurrUserTaskSet()

STATIC INLINE VOID ArchCurrUserTaskSet ( UINTPTR  val)

向协处理器写入用户态任务ID TPIDRURO 仅用于用户态

在文件 los_hw_cpu.h160 行定义.

161{
162 ARM_SYSREG_WRITE(TPIDRURO, (UINT32)val);
163}
这是这个函数的调用关系图:

◆ ArchIntLock()

STATIC INLINE UINT32 ArchIntLock ( VOID  )

禁止中断

在文件 los_hw_cpu.h190 行定义.

191{
192 UINT32 intSave;
193 __asm__ __volatile__(
194 "mrs %0, cpsr \n"
195 "cpsid if "
196 : "=r"(intSave)
197 :
198 : "memory");
199 return intSave;
200}
这是这个函数的调用关系图:

◆ ArchIntRestore()

STATIC INLINE VOID ArchIntRestore ( UINT32  intSave)

恢复到使用LOS_IntLock关闭所有中断之前的状态

在文件 los_hw_cpu.h260 行定义.

261{
262 __asm__ __volatile__(
263 "msr cpsr_c, %0 "
264 :
265 : "r"(intSave)
266 : "memory");
267}
这是这个函数的调用关系图:

◆ ArchIntUnlock()

STATIC INLINE UINT32 ArchIntUnlock ( VOID  )

打开当前处理器所有中断响应

在文件 los_hw_cpu.h202 行定义.

203{
204 UINT32 intSave;
205 __asm__ __volatile__(
206 "mrs %0, cpsr \n"
207 "cpsie if "
208 : "=r"(intSave)
209 :
210 : "memory");
211 return intSave;
212}
这是这个函数的调用关系图:

◆ ArchIrqDisable()

STATIC INLINE VOID ArchIrqDisable ( VOID  )

在文件 los_hw_cpu.h214 行定义.

215{
216 __asm__ __volatile__(
217 "cpsid i "
218 :
219 :
220 : "memory", "cc");
221}
这是这个函数的调用关系图:

◆ ArchIrqEnable()

STATIC INLINE VOID ArchIrqEnable ( VOID  )

在文件 los_hw_cpu.h223 行定义.

224{
225 __asm__ __volatile__(
226 "cpsie i "
227 :
228 :
229 : "memory", "cc");
230}
这是这个函数的调用关系图:

◆ ArchSPGet()

STATIC INLINE UINT32 ArchSPGet ( VOID  )

在文件 los_hw_cpu.h284 行定义.

285{
286 UINT32 val;
287 __asm__ __volatile__("mov %0, sp" : "=r"(val));
288 return val;
289}
这是这个函数的调用关系图:

◆ OsHwIDGet()

STATIC INLINE UINT64 OsHwIDGet ( VOID  )

获取CPU硬件ID,每个CPU都有自己的唯一标识

在文件 los_hw_cpu.h177 行定义.

178{
179 return ARM_SYSREG_READ(MPIDR);
180}
这是这个函数的调用关系图:

◆ OsIntLocked()

STATIC INLINE UINT32 OsIntLocked ( VOID  )

关闭当前处理器所有中断响应

在文件 los_hw_cpu.h271 行定义.

272{
273 UINT32 intSave;
274
275 asm volatile(
276 "mrs %0, cpsr "
277 : "=r" (intSave)
278 :
279 : "memory", "cc");
280
281 return intSave & PSR_I_BIT;
282}
这是这个函数的调用关系图:

◆ OsMainIDGet()

STATIC INLINE UINT32 OsMainIDGet ( VOID  )

获取CPU型号,包含CPU各种信息,例如:[15:4]表示 arm 7或arm 9

在文件 los_hw_cpu.h182 行定义.

183{
184 return ARM_SYSREG_READ(MIDR);
185}
这是这个函数的调用关系图: