线程自定义数据
每个线程都有一个32位的自定义数据,这个数据可以被应用程序用来传输任何数据相关概念
每个线程都有一个32位的自定义数据区,这个自定义数据只能被线程自己访问,并且可以被应用程序传输任何数据。默认情况下自定义数据是0note:中断服务函数是没有自定义数据的,因为中断服务函数是在一个单一共享的内核中断处理上下文中操作的
自定义数据的实现
使用自定义数据
默认情况下,线程自定义数据是不启用的。相关的配置选项:CONFIG_THREAD_CUSTOM_DATA 可以用来使能自定义数据功能k_thread_custom_data_set()和k_thread_custom_data_get()功能接口是用来写和读自定义数据的。一个线程只能访问它自己的自定义数据
下面的代码是通过自定义数据来记录每个线程调用某个指定处理函数的次数
note:很明显,只有单线程处理可以使用这种方式,因为自定义数据具有独占特性
int call_tracking_routine(void)
{
u32_t call_count;
if (k_is_in_isr()) {
/* ignore any call made by an ISR */
} else {
call_count = (u32_t)k_thread_custom_data_get();
call_count++;
k_thread_custom_data_set((void *)call_count);
}
/* do rest of routine's processing */
...
}
推荐用法
使用线程自定义数据允许程序访问线程指定的数据信息,所以我们可以把自定义数据设置为一个线程拥有的数据结构的指针配置选项
相关配置选项如下:CONFIG_THREAD_CUSTOM_DATA
APIs
下面是在kernel.h中定义的和线程自定义数据相关的APIsk_thread_custom_data_set()
k_thread_custom_data_get()