# 线程管理

TIP

  • MadThread.h
  • MadThread.c

# MadOS 线程状态

名称 说明
MAD_THREAD_READY 就绪
MAD_THREAD_PEND 挂起
MAD_THREAD_TIMEDLY 延时
MAD_THREAD_WAITSEM 等待信号量
MAD_THREAD_WAITMUTEX 等待互斥信号
MAD_THREAD_WAITMSG 等待消息
MAD_THREAD_WAITEVENT 等待事件

TIP

  • 只有调用 madTimeDly ,才会将线程置为延时状态。
  • 延时、等待信号量、等待互斥信号、等待消息、等待事件,彼此互斥。
  • 挂起可与延时 / 等待信号量 / 等待互斥信号 / 等待消息 / 等待事件同时存在。

# MadOS 线程常量

名称 说明
MAD_THREAD_SELF 本线程(当前线程)

# MadOS 线程函数类型

typedef void (*MadThread_t)(MadVptr)
1

# madThreadStkInit

MadStk_t* madThreadStkInit(MadVptr pStk, MadThread_t act, MadVptr exData)
1

新建线程时,对线程堆栈进行初始化。该函数需要根据具体的硬件进行实现。

参数名 方向 说明
pStk in 分配给该线程的堆栈底地址
act in 线程函数名
exData in 线程函数的初始参数(0则忽略)
返回值 说明
x 栈顶地址(供新建的线程使用)

# madThreadCreateCarefully

MadTCB_t* madThreadCreateCarefully( 
    MadThread_t act, 
    MadVptr     exData, 
    MadSize_t   size, 
    MadVptr     stk, 
    MadU8       prio,
    MadBool     run
)
1
2
3
4
5
6
7
8

新建线程。

参数名 方向 说明
act in 线程函数名
exData in 线程函数的初始参数(0则忽略)
size in 线程所需的堆栈尺寸(以字节为单位)
stk in 用户自定义的堆栈首地址(0则自动分配)
prio in 线程优先级
run in MTRUE: 线程立即执行 / MFALSE: 线程挂起
返回值 说明
0 失败
NZ 成功(指向新建线程控制块的指针)

# madThreadResume

void madThreadResume(MadU8 threadPrio)
1

恢复线程。

参数名 方向 说明
threadPrio in 欲恢复线程的优先级

# madThreadPend

void madThreadPend(MadU8 threadPrio)
1

挂起线程。

参数名 方向 说明
threadPrio in 欲挂起线程的优先级

# madThreadDelete

MadVptr madThreadDelete(MadU8 threadPrio)
1

删除线程。

参数名 方向 说明
threadPrio in 欲删除线程的优先级
返回值 说明
msg 线程msg(用户根据应用中所使用的内存分配机制进行回收)

# madThreadDoDelete

MadVptr madThreadDoDelete(MadU8 threadPrio)
1

删除线程。

参数名 方向 说明
threadPrio in 欲删除线程的优先级
返回值 说明
msg 线程msg(用户根据应用中所使用的内存分配机制进行回收)

# madThreadCreate(act, ed, sz, prio)

MadTCB_t* madThreadCreateCarefully( 
    MadThread_t act, 
    MadVptr     exData, 
    MadSize_t   size, 
    MadVptr     stk, 
    MadU8       prio,
    MadBool     run
)
1
2
3
4
5
6
7
8
参数
stk 0
run MTRUE

# madThreadCreateN(act, ed, sz, prio)

MadTCB_t* madThreadCreateCarefully( 
    MadThread_t act, 
    MadVptr     exData, 
    MadSize_t   size, 
    MadVptr     stk, 
    MadU8       prio,
    MadBool     run
)
1
2
3
4
5
6
7
8
参数
stk 0
run MFALSE