diff --git a/rt-thread-version/rt-thread-standard/programming-manual/ipc1/ipc1.md b/rt-thread-version/rt-thread-standard/programming-manual/ipc1/ipc1.md index 93cc0247eed230a33d1d2cf1d4c024ad6e147c5c..8f4d905e409c05ce3b701593cc34b40276a16b9c 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/ipc1/ipc1.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/ipc1/ipc1.md @@ -76,8 +76,6 @@ rt_semaphore 对象从 rt_ipc_object 中派生,由 IPC 容器所管理,信 当调用这个函数时,系统将先从对象管理器中分配一个 semaphore 对象,并初始化这个对象,然后初始化父类 IPC 对象以及与 semaphore 相关的部分。在创建信号量指定的参数中,信号量标志参数决定了当信号量不可用时,多个线程等待的排队方式。当选择 RT_IPC_FLAG_FIFO(先进先出)方式时,那么等待线程队列将按照先进先出的方式排队,先进入的线程将先获得等待的信号量;当选择 RT_IPC_FLAG_PRIO(优先级等待)方式时,等待线程队列将按照优先级进行排队,优先级高的等待线程将先获得等待的信号量。下表描述了该函数的输入参数与返回值: -rt_sem_create() 的输入参数和返回值 - |**参数** |**描述** | |--------------------|-------------------------------------------------------------------| | name | 信号量名称 | @@ -96,8 +94,6 @@ rt_err_t rt_sem_delete(rt_sem_t sem); 调用这个函数时,系统将删除这个信号量。如果删除该信号量时,有线程正在等待该信号量,那么删除操作会先唤醒等待在该信号量上的线程(等待线程的返回值是 - RT_ERROR),然后再释放信号量的内存资源。下表描述了该函数的输入参数与返回值: - rt_sem_delete() 的输入参数和返回值 - |**参数**|**描述** | |----------|----------------------------------| | sem | rt_sem_create() 创建的信号量对象 | @@ -118,8 +114,6 @@ rt_err_t rt_sem_init(rt_sem_t sem, 当调用这个函数时,系统将对这个 semaphore 对象进行初始化,然后初始化 IPC 对象以及与 semaphore 相关的部分。信号量标志可用上面创建信号量函数里提到的标志。下表描述了该函数的输入参数与返回值: - rt_sem_init() 的输入参数和返回值 - |**参数**|**描述** | |----------|-------------------------------------------------------------------| | sem | 信号量对象的句柄 | @@ -137,8 +131,6 @@ rt_err_t rt_sem_detach(rt_sem_t sem); 使用该函数后,内核先唤醒所有挂在该信号量等待队列上的线程,然后将该信号量从内核对象管理器中脱离。原来挂起在信号量上的等待线程将获得 - RT_ERROR 的返回值。下表描述了该函数的输入参数与返回值: - rt_sem_detach() 的输入参数和返回值 - |**参数**|**描述** | |----------|------------------| | sem | 信号量对象的句柄 | @@ -155,8 +147,6 @@ rt_err_t rt_sem_take (rt_sem_t sem, rt_int32_t time); 在调用这个函数时,如果信号量的值等于零,那么说明当前信号量资源实例不可用,申请该信号量的线程将根据 time 参数的情况选择直接返回、或挂起等待一段时间、或永久等待,直到其他线程或中断释放该信号量。如果在参数 time 指定的时间内依然得不到信号量,线程将超时返回,返回值是 - RT_ETIMEOUT。下表描述了该函数的输入参数与返回值: - rt_sem_take() 的输入参数和返回值 - |**参数** |**描述** | |---------------|---------------------------------------------------| | sem | 信号量对象的句柄 | @@ -176,8 +166,6 @@ rt_err_t rt_sem_trytake(rt_sem_t sem); 这个函数与 `rt_sem_take(sem, RT_WAITING_NO)` 的作用相同,即当线程申请的信号量资源实例不可用的时候,它不会等待在该信号量上,而是直接返回 - RT_ETIMEOUT。下表描述了该函数的输入参数与返回值: -rt_sem_trytake() 的输入参数和返回值 - |**参数** |**描述** | |---------------|------------------| | sem | 信号量对象的句柄 | @@ -195,8 +183,6 @@ rt_err_t rt_sem_release(rt_sem_t sem); 例如当信号量的值等于零时,并且有线程等待这个信号量时,释放信号量将唤醒等待在该信号量线程队列中的第一个线程,由它获取信号量;否则将把信号量的值加 1。下表描述了该函数的输入参数与返回值: - rt_sem_release() 的输入参数和返回值 - |**参数**|**描述** | |----------|------------------| | sem | 信号量对象的句柄 | @@ -207,7 +193,7 @@ rt_err_t rt_sem_release(rt_sem_t sem); 这是一个信号量使用例程,该例程创建了一个动态信号量,初始化两个线程,一个线程发送信号量,一个线程接收到信号量后,执行相应的操作。如下代码所示: -信号量的使用: +**信号量的使用** ```c #include @@ -346,7 +332,7 @@ t2 take a dynamic semaphore. number = 10 2 个线程分别为:①生产者线程:获取到空位后,产生一个数字,循环放入数组中,然后释放一个满位。②消费者线程:获取到满位后,读取数组内容并相加,然后释放一个空位。 -生产者消费者例程 +**生产者消费者例程** ```c #include @@ -627,8 +613,6 @@ rt_mutex_t rt_mutex_create (const char* name, rt_uint8_t flag); 可以调用 rt_mutex_create 函数创建一个互斥量,它的名字由 name 所指定。当调用这个函数时,系统将先从对象管理器中分配一个 mutex 对象,并初始化这个对象,然后初始化父类 IPC 对象以及与 mutex 相关的部分。互斥量的 flag 标志设置为 RT_IPC_FLAG_PRIO,表示在多个线程等待资源时,将由优先级高的线程优先获得资源。flag 设置为 RT_IPC_FLAG_FIFO,表示在多个线程等待资源时,将按照先来先得的顺序获得资源。下表描述了该函数的输入参数与返回值: - rt_mutex_create() 的输入参数和返回值 - |**参数** |**描述** | |------------|-------------------------------------------------------------------| | name | 互斥量的名称 | @@ -646,8 +630,6 @@ rt_err_t rt_mutex_delete (rt_mutex_t mutex); 当删除一个互斥量时,所有等待此互斥量的线程都将被唤醒,等待线程获得的返回值是 - RT_ERROR。然后系统将该互斥量从内核对象管理器链表中删除并释放互斥量占用的内存空间。下表描述了该函数的输入参数与返回值: - rt_mutex_delete() 的输入参数和返回值 - |**参数**|**描述** | |----------|------------------| | mutex | 互斥量对象的句柄 | @@ -664,8 +646,6 @@ rt_err_t rt_mutex_init (rt_mutex_t mutex, const char* name, rt_uint8_t flag); 使用该函数接口时,需指定互斥量对象的句柄(即指向互斥量控制块的指针),互斥量名称以及互斥量标志。互斥量标志可用上面创建互斥量函数里提到的标志。下表描述了该函数的输入参数与返回值: - rt_mutex_init() 的输入参数和返回值 - |**参数**|**描述** | |----------|-------------------------------------------------------------------| | mutex | 互斥量对象的句柄,它由用户提供,并指向互斥量对象的内存块 | @@ -682,8 +662,6 @@ rt_err_t rt_mutex_detach (rt_mutex_t mutex); 使用该函数接口后,内核先唤醒所有挂在该互斥量上的线程(线程的返回值是 -RT_ERROR),然后系统将该互斥量从内核对象管理器中脱离。下表描述了该函数的输入参数与返回值: -rt_mutex_detach() 的输入参数和返回值 - |**参数**|**描述** | |----------|------------------| | mutex | 互斥量对象的句柄 | @@ -701,8 +679,6 @@ rt_err_t rt_mutex_take (rt_mutex_t mutex, rt_int32_t time); 如果互斥量没有被其他线程控制,那么申请该互斥量的线程将成功获得该互斥量。如果互斥量已经被当前线程线程控制,则该互斥量的持有计数加 1,当前线程也不会挂起等待。如果互斥量已经被其他线程占有,则当前线程在该互斥量上挂起等待,直到其他线程释放它或者等待时间超过指定的超时时间。下表描述了该函数的输入参数与返回值: -rt_mutex_take() 的输入参数和返回值 - |**参数** |**描述** | |---------------|------------------| | mutex | 互斥量对象的句柄 | @@ -722,8 +698,6 @@ rt_err_t rt_mutex_trytake(rt_mutex_t mutex); 这个函数与 `rt_mutex_take(mutex, RT_WAITING_NO)` 的作用相同,即当线程申请的互斥量资源实例不可用的时候,它不会等待在该互斥量上,而是直接返回 - RT_ETIMEOUT。下表描述了该函数的输入参数与返回值: -rt_mutex_trytake() 的输入参数和返回值 - | **参数** | **描述** | | ------------- | ---------------- | | mutex | 互斥量对象的句柄 | @@ -742,8 +716,6 @@ rt_err_t rt_mutex_release(rt_mutex_t mutex); 使用该函数接口时,只有已经拥有互斥量控制权的线程才能释放它,每释放一次该互斥量,它的持有计数就减 1。当该互斥量的持有计数为零时(即持有线程已经释放所有的持有操作),它变为可用,等待在该信号量上的线程将被唤醒。如果线程的运行优先级被互斥量提升,那么当互斥量被释放后,线程恢复为持有互斥量前的优先级。下表描述了该函数的输入参数与返回值: -rt_mutex_release() 的输入参数和返回值 - |**参数**|**描述** | |----------|------------------| | mutex | 互斥量对象的句柄 | @@ -754,7 +726,7 @@ rt_mutex_release() 的输入参数和返回值 这是一个互斥量的应用例程,互斥锁是一种保护共享资源的方法。当一个线程拥有互斥锁的时候,可以保护共享资源不被其他线程破坏。下面用一个例子来说明,有两个线程:线程 1 和线程 2,线程 1 对 2 个 number 分别进行加 1 操作;线程 2 也对 2 个 number 分别进行加 1 操作,使用互斥量保证线程改变 2 个 number 值的操作不被打断。如下代码所示: -互斥量例程 +**互斥量例程** ```c #include @@ -865,7 +837,7 @@ mutex protect ,number1 = mumber2 is 49 互斥量的另一个例子见下面的代码,这个例子将创建 3 个动态线程以检查持有互斥量时,持有的线程优先级是否被调整到等待线程优先级中的最高优先级。 -防止优先级翻转特性例程 +**防止优先级翻转特性例程** ```c #include @@ -1087,8 +1059,6 @@ rt_event_t rt_event_create(const char* name, rt_uint8_t flag); 调用该函数接口时,系统会从对象管理器中分配事件集对象,并初始化这个对象,然后初始化父类 IPC 对象。下表描述了该函数的输入参数与返回值: - rt_event_create() 的输入参数和返回值 - |**参数** |**描述** | |----------------|---------------------------------------------------------------------| | name | 事件集的名称 | @@ -1105,8 +1075,6 @@ rt_err_t rt_event_delete(rt_event_t event); 在调用 rt_event_delete 函数删除一个事件集对象时,应该确保该事件集不再被使用。在删除前会唤醒所有挂起在该事件集上的线程(线程的返回值是 - RT_ERROR),然后释放事件集对象占用的内存块。下表描述了该函数的输入参数与返回值: -rt_event_delete() 的输入参数和返回值 - |**参数**|**描述** | |----------|------------------| | event | 事件集对象的句柄 | @@ -1123,8 +1091,6 @@ rt_err_t rt_event_init(rt_event_t event, const char* name, rt_uint8_t flag); 调用该接口时,需指定静态事件集对象的句柄(即指向事件集控制块的指针),然后系统会初始化事件集对象,并加入到系统对象容器中进行管理。下表描述了该函数的输入参数与返回值: - rt_event_init() 的输入参数和返回值 - |**参数**|**描述** | |----------|---------------------------------------------------------------------| | event | 事件集对象的句柄 | @@ -1141,8 +1107,6 @@ rt_err_t rt_event_detach(rt_event_t event); 用户调用这个函数时,系统首先唤醒所有挂在该事件集等待队列上的线程(线程的返回值是 - RT_ERROR),然后将该事件集从内核对象管理器中脱离。下表描述了该函数的输入参数与返回值: -rt_event_detach() 的输入参数和返回值 - |**参数**|**描述** | |----------|------------------| | event | 事件集对象的句柄 | @@ -1159,8 +1123,6 @@ rt_err_t rt_event_send(rt_event_t event, rt_uint32_t set); 使用该函数接口时,通过参数 set 指定的事件标志来设定 event 事件集对象的事件标志值,然后遍历等待在 event 事件集对象上的等待线程链表,判断是否有线程的事件激活要求与当前 event 对象事件标志值匹配,如果有,则唤醒该线程。下表描述了该函数的输入参数与返回值: -rt_event_send() 的输入参数和返回值 - |**参数**|**描述** | |----------|------------------------------| | event | 事件集对象的句柄 | @@ -1182,8 +1144,6 @@ rt_err_t rt_event_recv(rt_event_t event, 当用户调用这个接口时,系统首先根据 set 参数和接收选项 option 来判断它要接收的事件是否发生,如果已经发生,则根据参数 option 上是否设置有 RT_EVENT_FLAG_CLEAR 来决定是否重置事件的相应标志位,然后返回(其中 recved 参数返回接收到的事件);如果没有发生,则把等待的 set 和 option 参数填入线程本身的结构中,然后把线程挂起在此事件上,直到其等待的事件满足条件或等待时间超过指定的超时时间。如果超时时间设置为零,则表示当线程要接受的事件没有满足其要求时就不等待,而直接返回 - RT_ETIMEOUT。下表描述了该函数的输入参数与返回值: - rt_event_recv() 的输入参数和返回值 - |**参数** |**描述** | |---------------|----------------------| | event | 事件集对象的句柄 | @@ -1211,7 +1171,7 @@ RT_EVENT_FLAG_CLEAR 这是事件集的应用例程,例子中初始化了一个事件集,两个线程。一个线程等待自己关心的事件发生,另外一个线程发送事件,如以下代码所示: -事件集的使用例程 +**事件集的使用例程** ```c #include diff --git a/rt-thread-version/rt-thread-standard/programming-manual/ipc2/ipc2.md b/rt-thread-version/rt-thread-standard/programming-manual/ipc2/ipc2.md index 9e8e369c28f55376205550c470cb73a630e438dd..02a79db46c9bccf13a1049fbd3f63adf08850546 100644 --- a/rt-thread-version/rt-thread-standard/programming-manual/ipc2/ipc2.md +++ b/rt-thread-version/rt-thread-standard/programming-manual/ipc2/ipc2.md @@ -57,8 +57,6 @@ rt_mailbox_t rt_mb_create (const char* name, rt_size_t size, rt_uint8_t flag); 创建邮箱对象时会先从对象管理器中分配一个邮箱对象,然后给邮箱动态分配一块内存空间用来存放邮件,这块内存的大小等于邮件大小(4 字节)与邮箱容量的乘积,接着初始化接收邮件数目和发送邮件在邮箱中的偏移量。下表描述了该函数的输入参数与返回值: - rt_mb_create() 的输入参数和返回值 - |**参数** |**描述** | |----------------|------------------------------------------------------------------| | name | 邮箱名称 | @@ -74,10 +72,7 @@ rt_mailbox_t rt_mb_create (const char* name, rt_size_t size, rt_uint8_t flag); rt_err_t rt_mb_delete (rt_mailbox_t mb); ``` -删除邮箱时,如果有线程被挂起在该邮箱对象上,内核先唤醒挂起在该邮箱上的所有线程(线程返回值是 - -RT_ERROR),然后再释放邮箱使用的内存,最后删除邮箱对象。下表描述了该函数的输入参数与返回值: - - rt_mb_delete() 的输入参数和返回值 +删除邮箱时,如果有线程被挂起在该邮箱对象上,内核先唤醒挂起在该邮箱上的所有线程(线程返回值是 -RT_ERROR),然后再释放邮箱使用的内存,最后删除邮箱对象。下表描述了该函数的输入参数与返回值: |**参数**|**描述** | |----------|----------------| @@ -99,8 +94,6 @@ RT_ERROR),然后再释放邮箱使用的内存,最后删除邮箱对象。 初始化邮箱时,该函数接口需要获得用户已经申请获得的邮箱对象控制块,缓冲区的指针,以及邮箱名称和邮箱容量(能够存储的邮件数)。下表描述了该函数的输入参数与返回值: - rt_mb_init() 的输入参数和返回值 - |**参数**|**描述** | |----------|-----------------------------------------------------------------| | mb | 邮箱对象的句柄 | @@ -121,8 +114,6 @@ rt_err_t rt_mb_detach(rt_mailbox_t mb); 使用该函数接口后,内核先唤醒所有挂在该邮箱上的线程(线程获得返回值是 - RT_ERROR),然后将该邮箱对象从内核对象管理器中脱离。下表描述了该函数的输入参数与返回值: - rt_mb_detach() 的输入参数和返回值 - |**参数**|**描述** | |----------|----------------| | mb | 邮箱对象的句柄 | @@ -139,8 +130,6 @@ rt_err_t rt_mb_send (rt_mailbox_t mb, rt_uint32_t value); 发送的邮件可以是 32 位任意格式的数据,一个整型值或者一个指向缓冲区的指针。当邮箱中的邮件已经满时,发送邮件的线程或者中断程序会收到 -RT_EFULL 的返回值。下表描述了该函数的输入参数与返回值: - rt_mb_send() 的输入参数和返回值 - |**参数** |**描述** | |------------|----------------| | mb | 邮箱对象的句柄 | @@ -161,8 +150,6 @@ rt_err_t rt_mb_send_wait (rt_mailbox_t mb, rt_mb_send_wait() 与 rt_mb_send() 的区别在于有等待时间,如果邮箱已经满了,那么发送线程将根据设定的 timeout 参数等待邮箱中因为收取邮件而空出空间。如果设置的超时时间到达依然没有空出空间,这时发送线程将被唤醒并返回错误码。下表描述了该函数的输入参数与返回值: - rt_mb_send_wait() 的输入参数和返回值 - |**参数** |**描述** | |---------------|----------------| | mb | 邮箱对象的句柄 | @@ -183,8 +170,6 @@ rt_err_t rt_mb_urgent (rt_mailbox_t mb, rt_ubase_t value); 下表描述了该函数的输入参数与返回值: - rt_mb_urgent() 的输入参数和返回值 - | **参数** | **描述** | | ---------- | -------------- | | mb | 邮箱对象的句柄 | @@ -203,8 +188,6 @@ rt_err_t rt_mb_recv (rt_mailbox_t mb, rt_uint32_t* value, rt_int32_t timeout); 接收邮件时,接收者需指定接收邮件的邮箱句柄,并指定接收到的邮件存放位置以及最多能够等待的超时时间。如果接收时设定了超时,当指定的时间内依然未收到邮件时,将返回 - RT_ETIMEOUT。下表描述了该函数的输入参数与返回值: - rt_mb_recv() 的输入参数和返回值 - |**参数** |**描述** | |---------------|----------------| | mb | 邮箱对象的句柄 | @@ -219,7 +202,7 @@ rt_err_t rt_mb_recv (rt_mailbox_t mb, rt_uint32_t* value, rt_int32_t timeout); 这是一个邮箱的应用例程,初始化 2 个静态线程,一个静态的邮箱对象,其中一个线程往邮箱中发送邮件,一个线程往邮箱中收取邮件。如下代码所示: - 邮箱的使用例程 + **邮箱的使用例程** ```c #include @@ -451,8 +434,6 @@ rt_mq_t rt_mq_create(const char* name, rt_size_t msg_size, 创建消息队列时先从对象管理器中分配一个消息队列对象,然后给消息队列对象分配一块内存空间,组织成空闲消息链表,这块内存的大小 =[消息大小 + 消息头(用于链表连接)的大小]X 消息队列最大个数,接着再初始化消息队列,此时消息队列为空。下表描述了该函数的输入参数与返回值: - rt_mq_create() 的输入参数和返回值 - |**参数** |**描述** | |--------------------|-------------------------------------------------------------------------------| | name | 消息队列的名称 | @@ -472,8 +453,6 @@ rt_err_t rt_mq_delete(rt_mq_t mq); 删除消息队列时,如果有线程被挂起在该消息队列等待队列上,则内核先唤醒挂起在该消息等待队列上的所有线程(线程返回值是 - RT_ERROR),然后再释放消息队列使用的内存,最后删除消息队列对象。下表描述了该函数的输入参数与返回值: - rt_mq_delete() 的输入参数和返回值 - |**参数**|**描述** | |----------|--------------------| | mq | 消息队列对象的句柄 | @@ -492,8 +471,6 @@ rt_err_t rt_mq_init(rt_mq_t mq, const char* name, 初始化消息队列时,该接口需要用户已经申请获得的消息队列对象的句柄(即指向消息队列对象控制块的指针)、消息队列名、消息缓冲区指针、消息大小以及消息队列缓冲区大小。消息队列初始化后所有消息都挂在空闲消息链表上,消息队列为空。下表描述了该函数的输入参数与返回值: - rt_mq_init() 的输入参数和返回值 - |**参数** |**描述** | |-----------|-------------------------------------------------------------------------------| | mq | 消息队列对象的句柄 | @@ -513,8 +490,6 @@ rt_err_t rt_mq_detach(rt_mq_t mq); 使用该函数接口后,内核先唤醒所有挂在该消息等待队列对象上的线程(线程返回值是 -RT_ERROR),然后将该消息队列对象从内核对象管理器中脱离。下表描述了该函数的输入参数与返回值: - rt_mq_detach() 的输入参数和返回值 - |**参数**|**描述** | |----------|--------------------| | mq | 消息队列对象的句柄 | @@ -531,8 +506,6 @@ rt_err_t rt_mq_send (rt_mq_t mq, void* buffer, rt_size_t size); 发送消息时,发送者需指定发送的消息队列的对象句柄(即指向消息队列控制块的指针),并且指定发送的消息内容以及消息大小。在发送一个普通消息之后,空闲消息链表上的队首消息被转移到了消息队列尾。下表描述了该函数的输入参数与返回值: - rt_mq_send() 的输入参数和返回值 - |**参数** |**描述** | |------------|------------------------------------------------------| | mq | 消息队列对象的句柄 | @@ -556,8 +529,6 @@ rt_err_t rt_mq_send_wait(rt_mq_t mq, rt_mq_send_wait() 与 rt_mq_send() 的区别在于有等待时间,如果消息队列已经满了,那么发送线程将根据设定的 timeout 参数进行等待。如果设置的超时时间到达依然没有空出空间,这时发送线程将被唤醒并返回错误码。下表描述了该函数的输入参数与返回值: - rt_mq_send_wait() 的输入参数和返回值 - |**参数** |**描述** | |------------|------------------------------------------------------| | mq | 消息队列对象的句柄 | @@ -579,8 +550,6 @@ rt_err_t rt_mq_urgent(rt_mq_t mq, void* buffer, rt_size_t size); 下表描述了该函数的输入参数与返回值: - rt_mq_urgent() 的输入参数和返回值 - |**参数** |**描述** | |------------|--------------------| | mq | 消息队列对象的句柄 | @@ -602,8 +571,6 @@ rt_err_t rt_mq_recv (rt_mq_t mq, void* buffer, 接收消息时,接收者需指定存储消息的消息队列对象句柄,并且指定一个内存缓冲区,接收到的消息内容将被复制到该缓冲区里。此外,还需指定未能及时取到消息时的超时时间。如下图所示,接收一个消息后消息队列上的队首消息被转移到了空闲消息链表的尾部。下表描述了该函数的输入参数与返回值: - rt_mq_recv() 的输入参数和返回值 - |**参数** |**描述** | |---------------|--------------------| | mq | 消息队列对象的句柄 | @@ -619,7 +586,7 @@ rt_err_t rt_mq_recv (rt_mq_t mq, void* buffer, 这是一个消息队列的应用例程,例程中初始化了 2 个静态线程,一个线程会从消息队列中收取消息;另一个线程会定时给消息队列发送普通消息和紧急消息,如下代码所示: - 消息队列的使用例程 + **消息队列的使用例程** ```c #include @@ -904,8 +871,6 @@ rt_sighandler_t rt_signal_install(int signo, rt_sighandler_t[] handler); 其中 rt_sighandler_t 是定义信号处理函数的函数指针类型。下表描述了该函数的输入参数与返回值: - rt_signal_install() 的输入参数和返回值 - |**参数** |**描述** | |-----------------------|--------------------------------------------------------| | signo | 信号值(只有 SIGUSR1 和 SIGUSR2 是开放给用户使用的,下同) | @@ -932,8 +897,6 @@ void rt_signal_mask(int signo); 下表描述了该函数的输入参数: - rt_signal_mask() 函数参数 - |**参数**|**描述**| |----------|----------| | signo | 信号值 | @@ -964,8 +927,6 @@ int rt_thread_kill(rt_thread_t tid, int sig); 下表描述了该函数的输入参数与返回值: - rt_thread_kill() 的输入参数和返回值 - |**参数** |**描述** | |-------------|----------------| | tid | 接收信号的线程 | @@ -985,8 +946,6 @@ int rt_signal_wait(const rt_sigset_t *set, 其中 rt_siginfo_t 是定义信号信息的数据类型,下表描述了该函数的输入参数与返回值: - rt_signal_wait() 的输入参数和返回值 - |**参数** |**描述** | |---------------|----------------------------| | set | 指定等待的信号 | @@ -1001,7 +960,7 @@ int rt_signal_wait(const rt_sigset_t *set, 这是一个信号的应用例程,如下代码所示。此例程创建了 1 个线程,在安装信号时,信号处理方式设为自定义处理,定义的信号的处理函数为 thread1_signal_handler()。待此线程运行起来安装好信号之后,给此线程发送信号。此线程将接收到信号,并打印信息。 - 信号使用例程 + **信号使用例程** ```c #include