CMSIS-RTOS2 文档翻译 之 参考(RTX5 特定的 API 之 事件功能(线程函数))

线程函数

线程函数生成的事件。更多...

函数

void EvrRtxThreadError (osThreadId_t thread_id, int32_t status)
 线程错误事件(错误)更多...
 
void EvrRtxThreadNew (osThreadFunc_t func, void *argument, const osThreadAttr_t *attr)
 线程创建和初始化事件(API)更多...
 
void EvrRtxThreadCreated (osThreadId_t thread_id, uint32_t thread_addr)
 成功创建线程的事件(Op)更多...
 
void EvrRtxThreadGetName (osThreadId_t thread_id, const char *name)
 线程名称检索事件(API)更多...
 
void EvrRtxThreadGetId (osThreadId_t thread_id)
 当前正在运行的线程 ID 检索事件 (API) 更多...
 
void EvrRtxThreadGetState (osThreadId_t thread_id, osThreadState_t state)
 线程状态检索事件(API)更多...
 
void EvrRtxThreadGetStackSize (osThreadId_t thread_id, uint32_t stack_size)
 线程堆栈大小检索事件(API)更多...
 
void EvrRtxThreadGetStackSpace (osThreadId_t thread_id, uint32_t stack_space)
 可用堆栈空间检索事件 (API) 更多...
 
void EvrRtxThreadSetPriority (osThreadId_t thread_id, osPriority_t priority)
 线程优先级设置事件(API)更多...
 
void EvrRtxThreadGetPriority (osThreadId_t thread_id, osPriority_t priority)
 线程优先检索事件(API)更多...
 
void EvrRtxThreadYield (void)
 线程收益事件(API)更多...
 
void EvrRtxThreadSuspend (osThreadId_t thread_id)
 线程挂起事件(API)更多...
 
void EvrRtxThreadSuspended (osThreadId_t thread_id)
 成功线程挂起的事件(Op)更多...
 
void EvrRtxThreadResume (osThreadId_t thread_id)
 线程恢复事件(API)更多...
void EvrRtxThreadResumed (osThreadId_t thread_id)
 成功的线程恢复事件(Op)更多...
 
void EvrRtxThreadDetach (osThreadId_t thread_id)
 线程分离事件(API)更多...
 
void EvrRtxThreadDetached (osThreadId_t thread_id)
 成功的线程分离事件(Op)更多...
 
void EvrRtxThreadJoin (osThreadId_t thread_id)
 线程连接事件(API)更多...
 
void EvrRtxThreadJoinPending (osThreadId_t thread_id)
 挂起线程连接事件(Op)更多...
 
void EvrRtxThreadJoined (osThreadId_t thread_id)
 成功的线程连接事件(Op)更多...
 
void EvrRtxThreadBlocked (osThreadId_t thread_id, uint32_t timeout)
 线程执行块事件(Op)更多...
 
void EvrRtxThreadUnblocked (osThreadId_t thread_id, uint32_t ret_val)
 线程执行解除阻塞事件(Op)更多...
 
void EvrRtxThreadPreempted (osThreadId_t thread_id)
 运行线程优先事件(Op)更多...
 
void EvrRtxThreadSwitched (osThreadId_t thread_id)
 运行线程切换事件(Op)更多...
void EvrRtxThreadExit (void)
 线程退出事件(API)更多...
 
void EvrRtxThreadTerminate (osThreadId_t thread_id)
 线程终止事件(API)更多...
 
void EvrRtxThreadDestroyed (osThreadId_t thread_id)
 成功的线程终止事件(Op)更多...
 
void EvrRtxThreadGetCount (uint32_t count)
 活动线程数检索事件(API)更多...
 
void EvrRtxThreadEnumerate (osThreadId_t *thread_array, uint32_t array_items, uint32_t count)
 活动线程枚举事件(API)更多...
 
void EvrRtxThreadFlagsWaitTimeout (void)
 线程标志等待超时事件(Op)更多...
 
void EvrRtxThreadDelay (uint32_t ticks)
 等待超时事件(API)更多...
 
void EvrRtxThreadDelayUntil (uint32_t ticks)
 等待指定时间事件(API)更多...
 
void EvrRtxThreadDelayCompleted (void)
 已完成等待的事件(Op)更多...
 

描述

函数文档

void EvrRtxThreadError(osThreadId_t thread_id,
  int32_t status 
 )  
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取,或在 ID 未知时为 NULL 。
[in]status延长执行状态。

线程标志和线程管理例程由于错误而完成执行时,会生成事件 ThreadError 。

status 参数指示执行状态,可以是 osStatus_t 代码之一或下表中汇总的扩展执行状态代码之一。

扩展状态码描述
osRtxErrorKernelNotReady内核调度程序未处于就绪状态。
osRtxErrorKernelNotRunning内核调度程序未执行 - 没有正在运行的线程。
osRtxErrorInvalidControlBlock指定了具有无效对齐或大小的对象控制块。
osRtxErrorInvalidDataMemory指定了具有无效对齐或大小的对象数据存储器。
osRtxErrorInvalidThreadStack线程堆栈内存的无效对齐或大小被指定。
osRtxErrorInvalidPriority指定了无效的线程优先级。
osRtxErrorThreadNotJoinable指定的线程不可连接。
osRtxErrorMutexNotOwned指定的互斥锁不属于当前正在运行的线程。
osRtxErrorMutexNotLocked指定的互斥锁未锁定。
osRtxErrorMutexLockLimit达到递归互斥锁的最大数目。
osRtxErrorSemaphoreCountLimit达到了信号量计数限制。
osRtxErrorTZ_InitContext_S安全上下文内存系统初始化失败
osRtxErrorTZ_AllocContext_S安全上下文内存分配失败。
osRtxErrorTZ_FreeContext_S安全上下文内存释放失败。
osRtxErrorTZ_LoadContext_S安全上下文加载失败。
osRtxErrorTZ_SaveContext_S安全上下文保存失败。

事件记录器中的值显示:

  • thread_id : 线程 ID。
  • status : 执行状态代码。
void EvrRtxThreadNew(osThreadFunc_t func,
  void * argument,
  const osThreadAttr_tattr 
 )  
参数
[in]func线程函数。
[in]argument作为启动参数传递给线程函数的指针。
[in]attr线程属性。

事件 ThreadNew 在调用函数 osThreadNew 时生成。

事件记录器中的值显示:

  • func : 线程函数的内存地址。
  • argument : 线程函数启动参数的内存地址。
  • attr : 线程属性的内存地址或未指定时的 0。

在 API 调用中提供线程属性的情况下,它们也在事件记录器中详细说明。

void EvrRtxThreadCreated(osThreadId_t thread_id,
  uint32_t thread_addr 
 )  
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。
[in]thread_addr线程入口地址。

事件 ThreadCreated 在函数 osThreadNew 成功创建线程对象时生成。

事件记录器中的值显示:

  • thread_id : 线程 ID。
void EvrRtxThreadGetName(osThreadId_t thread_id,
  const char * name 
 )  
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。
[in]name指向线程对象名称的指针。

当函数 osThreadGetName 被调用并且其执行结果已知时,会生成事件 ThreadGetName。

事件记录器中的值显示:

  • thread_id : 线程 ID。
  • name : 检索到名称字符串的内存地址(如果发生故障,则为 0)。
void EvrRtxThreadGetId(osThreadId_t thread_id) 
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。

事件 ThreadGetId 在调用函数 osThreadGetId 并且其执行结果已知时生成。

事件记录器中的值显示:

  • thread_id : 检索到的线程(在发生故障的情况下为 0)。
void EvrRtxThreadGetState(osThreadId_t thread_id,
  osThreadState_t state 
 )  
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。
[in]state指定线程的当前线程状态。

当调用函数 osThreadGetState 并且其执行结果已知时,会生成事件 ThreadGetState。

事件记录器中的值显示:

  • thread_id : 线程 ID。
  • state : 检索当前线程状态。
void EvrRtxThreadGetStackSize(osThreadId_t thread_id,
  uint32_t stack_size 
 )  
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。
[in]stack_size堆栈大小以字节为单位

事件 ThreadGetStackSize 是在函数 osThreadGetStackSize 被调用并且其执行结果已知时生成的。

事件记录器中的值显示:

  • thread_id : 线程 ID。
  • stack_size : 以字节为单位检索剩余堆栈空间(如果发生故障,则为 0)。
void EvrRtxThreadGetStackSpace(osThreadId_t thread_id,
  uint32_t stack_space 
 )  
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。
[in]stack_space剩余堆栈空间以字节为单位

事件 ThreadGetStackSpace 是在函数 osThreadGetStackSpace 被调用并且其执行结果已知时生成的。

事件记录器中的值显示:

  • thread_id : 线程 ID。
  • stack_space : 以字节为单位检索剩余堆栈空间(如果发生故障,则为 0)。
void EvrRtxThreadSetPriority(osThreadId_t thread_id,
  osPriority_t priority 
 )  
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。
[in]priority线程函数的新优先值。

事件 ThreadSetPriority 在调用函数 osThreadSetPriority 时生成。

事件记录器中的值显示:

  • thread_id : 线程 ID。
  • priority : 线程函数的新优先值。
void EvrRtxThreadGetPriority(osThreadId_t thread_id,
  osPriority_t priority 
 )  
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。
[in]priority指定线程的当前优先级值。

事件 ThreadGetPriority 在调用函数 osThreadGetPriority 并且其执行结果已知时生成。

事件记录器中的值显示:

  • thread_id : 线程 ID。
  • priority : 指定线程的当前优先级值。
void EvrRtxThreadYield(void  ) 

事件 ThreadYield 在调用函数 osThreadYield 时生成。

void EvrRtxThreadSuspend(osThreadId_t thread_id) 
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。

当调用 osThreadSuspend 函数时会生成事件 ThreadSuspend。

事件记录器中的值显示:

  • thread_id : 线程 ID。
void EvrRtxThreadSuspended(osThreadId_t thread_id) 
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。

事件 ThreadSuspended 在函数 osThreadSuspend 成功挂起指定的线程时生成。

事件记录器中的值显示:

  • thread_id : 线程 ID。
void EvrRtxThreadResume(osThreadId_t thread_id) 
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。

事件 ThreadResume 在调用函数 osThreadResume 时生成。

事件记录器中的值显示:

  • thread_id : 线程 ID。
void EvrRtxThreadResumed(osThreadId_t thread_id) 
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。

当函数 osThreadResume 成功恢复指定的线程时,将生成事件 ThreadResumed。

事件记录器中的值显示:

  • thread_id : 线程 ID。
void EvrRtxThreadDetach(osThreadId_t thread_id) 
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。

事件 ThreadDetach 是在函数 osThreadDetach 被调用时生成的。

事件记录器中的值显示:

  • thread_id : 线程 ID。
void EvrRtxThreadDetached(osThreadId_t thread_id) 
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。

事件 ThreadDetached 在函数 osThreadDetach 成功分离指定的线程时生成。

事件记录器中的值显示:

  • thread_id : 线程 ID。
void EvrRtxThreadJoin(osThreadId_t thread_id) 
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。

事件 ThreadJoin 是在函数 osThreadJoin 被调用时生成的。

事件记录器中的值显示:

  • thread_id : 线程 ID。
void EvrRtxThreadJoinPending(osThreadId_t thread_id) 
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。

当函数 osThreadJoin 挂起当前正在运行的线程直到指定的线程终止时,会生成事件 ThreadJoinPending。

事件记录器中的值显示:

  • thread_id : 线程 ID。
void EvrRtxThreadJoined(osThreadId_t thread_id) 
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。

事件 ThreadJoined 在函数 osThreadJoin 成功加入指定的线程时生成。

事件记录器中的值显示:

  • thread_id : 线程 ID。
void EvrRtxThreadBlocked(osThreadId_t thread_id,
  uint32_t timeout 
 )  
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。
[in]timeout超时值或 0 在没有超时的情况下。

事件 ThreadBlocked 在当前正在运行的线程执行被阻止时生成。

事件记录器中的值显示:

  • thread_id : 线程 ID。
  • timeout : 超时值。
void EvrRtxThreadUnblocked(osThreadId_t thread_id,
  uint32_t ret_val 
 )  
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。
[in]ret_val扩展线程的执行状态。

当阻塞的线程执行被解除时,会生成事件 ThreadUnblocked。

事件记录器中的值显示:

  • thread_id : 线程 ID。
  • ret_val : 扩展线程的执行状态。
void EvrRtxThreadPreempted(osThreadId_t thread_id) 
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。

事件 ThreadPreempted 在当前正在运行的线程执行被抢占时生成。

事件记录器中的值显示:

  • thread_id : 线程 ID。
void EvrRtxThreadSwitched(osThreadId_t thread_id) 
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。

事件 ThreadSwitched 在当前正在运行的线程执行切换时生成。

事件记录器中的值显示:

  • thread_id : 线程 ID。
void EvrRtxThreadExit(void  ) 

ThreadExit 事件是在函数 osThreadExit 被调用时生成的。

void EvrRtxThreadTerminate(osThreadId_t thread_id) 
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。

事件 ThreadTerminate 在调用 osThreadTerminate 函数时生成。

事件记录器中的值显示:

  • thread_id : 线程 ID。
void EvrRtxThreadDestroyed(osThreadId_t thread_id) 
参数
[in]thread_id线程 ID 由 osThreadNew 或 osThreadGetId 获取。

事件 ThreadDestroyed 在函数 osThreadExit 或 osThreadTerminate 成功终止线程时生成。

事件记录器中的值显示:

  • thread_id : 线程 ID。
void EvrRtxThreadGetCount(uint32_t count) 
参数
[in]count活动线程数。

事件 ThreadGetCount 在函数 osThreadGetCount 被调用并且其执行结果已知时生成。

事件记录器中的值显示:

  • count : 检索活动线程的数量(如果发生故障,则为 0)。
void EvrRtxThreadEnumerate(osThreadId_tthread_array,
  uint32_t array_items,
  uint32_t count 
 )  
参数
[in]thread_array指向数组以检索线程 ID 的指针。
[in]array_items数组中用于检索线程 ID 的最大项目数。
[in]count枚举线程数。

事件 ThreadEnumerate 是在函数 osThreadEnumerate 被调用并且其执行结果已知时生成的。

事件记录器中的值显示:

  • thread_array : 用于检索线程 ID 的数组的内存地址。
  • array_items : thread_array 中的最大项目数。
  • count : 枚举线程数(在发生故障的情况下为 0)。
void EvrRtxThreadFlagsWaitTimeout(void  ) 

事件 ThreadFlagsWaitTimeout 在等待由于过期的等待超时而导致信号线程标志等待中断时生成。

void EvrRtxThreadDelay(uint32_t ticks) 
参数
[in]ticks时间滴答值。

当调用 osDelay 函数时会生成事件 ThreadDelay。

事件记录器中的值显示:

  • ticks : 时间滴答值。
void EvrRtxThreadDelayUntil(uint32_t ticks) 
参数
[in]ticks绝对时间节拍。

事件 ThreadDelayUntil 在调用函数 osDelayUntil 时生成。

事件记录器中的值显示:

  • ticks : 绝对延迟时间以节拍为单位。
void EvrRtxThreadDelayCompleted(void  ) 

当线程延迟到期时,会生成事件 ThreadDelayCompleted。


### MIMO System Implementation in MATLAB In MATLAB, implementing Multi-Input Multi-Output (MIMO) systems involves several key components that allow for both simulation and analysis of complex communication channels or control systems. The MathWorks platform provides comprehensive support through its toolboxes specifically designed for this purpose. For communications engineering, the Communications Toolbox offers functions and apps to model, simulate, and analyze the performance of wireless transceivers using multiple antennas at both transmitter and receiver ends[^2]. This toolbox includes capabilities for generating modulated waveforms with space-time block coding schemes which are essential techniques used within modern MIMO architectures. Control system design can be facilitated by employing Simulink along with Control System Toolbox where users have access not only to predefined blocks but also custom modeling elements necessary when working on sophisticated feedback loops involving multiple inputs/outputs scenarios [^1]. #### Example Code Demonstrating Basic MIMO Channel Simulation Using Rayleigh Fading Model Below is an illustrative piece of MATLAB code demonstrating how one might set up a simple yet effective demonstration of signal propagation over a flat-fading channel characterized by independent identically distributed (i.i.d.) complex Gaussian random variables representing multipath effects typical found inside urban environments: ```matlab % Define parameters numTx = 4; % Number of transmit antennas numRx = 8; % Number of receive antennas snr_dB = 0:2:20; ber = zeros(length(snr_dB),1); for i=1:length(snr_dB) snr_linear = db2pow(snr_dB(i)); % Generate transmitted symbols tx_symbols = randn(numTx,1)+j*randn(numTx,1); % Create channel matrix H following Rayleigh distribution h_real = randn(numRx,numTx)/sqrt(2); h_imag = randn(numRx,numTx)/sqrt(2); H = h_real + j*h_imag; % Add noise n ~ CN(0,N_0*I) N0 = 1/snr_linear; rx_noise = sqrt(N0/2)*(randn(numRx,1)+j*randn(numRx,1)); % Received vector y = H*x+n rx_signal = H * tx_symbols + rx_noise; end ``` This script initializes some basic properties like number of transmitting/receiving nodes before entering into loop structure iterating across different Signal-to-noise ratios values. Inside each iteration step, it creates sample data points drawn randomly according standard normal distributions serving as our hypothetical 'transmitted' information bits encoded via quadrature amplitude modulation scheme. Then constructs corresponding transfer function matrices whose entries follow circularly symmetric complex Normal probability density function approximating small-scale fading phenomena observed under non-line-of-sight conditions common among densely populated areas. Finally adds white additive gaussian noises corrupting received copies thereby emulating realistic noisy environment faced during actual transmissions.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值