当前位置: 首页 > wzjs >正文

wordpress中文标题转换拼音插件搜索引擎seo优化怎么做

wordpress中文标题转换拼音插件,搜索引擎seo优化怎么做,南京专业网站制作,济宁推广_object_container对象容器数组 在RT-Thread操作系统中&#xff0c;_object_container数组的作用是按类型分类管理内核对象&#xff0c;提供高效的类型检查、资源管理和统计功能 struct rt_list_node {struct rt_list_node *next; /**< point to…

_object_container对象容器数组

在RT-Thread操作系统中,_object_container数组的作用是按类型分类管理内核对象,提供高效的类型检查、资源管理和统计功能

struct rt_list_node
{struct rt_list_node *next;                          /**< point to next node. */struct rt_list_node *prev;                          /**< point to prev node. */
};
typedef struct rt_list_node rt_list_t;                  /**< Type for lists. */struct rt_object_information
{enum rt_object_class_type type;                     /**< object class type */rt_list_t                 object_list;              /**< object list */rt_size_t                 object_size;              /**< object size */
};#define _OBJ_CONTAINER_LIST_INIT(c)     \{&(_object_container[c].object_list), &(_object_container[c].object_list)}static struct rt_object_information _object_container[RT_Object_Info_Unknown] =
{/* initialize object container - thread */{RT_Object_Class_Thread, _OBJ_CONTAINER_LIST_INIT(RT_Object_Info_Thread), sizeof(struct rt_thread)},/* initialize object container - semaphore */{RT_Object_Class_Semaphore, _OBJ_CONTAINER_LIST_INIT(RT_Object_Info_Semaphore), sizeof(struct rt_semaphore)},// ......
}

从源码可以看出,_object_container包含了所有对象,如threadsem

_OBJ_CONTAINER_LIST_INIT可能比较难理解,里面有两个一模一样的&(_object_container[c].object_list),乍一看rt_object_information结构体也才3个元素,这里宏展开后一共都有4个元素了?

其实不然,_OBJ_CONTAINER_LIST_INIT用了花括号,只代表一个元素rt_list_t object_list,花括号里的值代表着nextprev

至于为什么是两个一模一样的值,看过rt_list_init函数就理解了,这也和这个宏的名字对上了,即初始化

// 链表初始化 即自己指向自己
rt_inline void rt_list_init(rt_list_t *l)
{l->next = l->prev = l;
}



rt_object_allocate(用于动态创建对象)

rt_object_allocate为新创建的对象申请句柄内存,并将其加入到链表中

以下是动态创建线程的接口代码:

rt_thread_t rt_thread_create(const char *name, void (*entry)(void *parameter), void *parameter, rt_uint32_t stack_size,rt_uint8_t priority, rt_uint32_t tick)
{struct rt_thread *thread;void *stack_start;thread = (struct rt_thread *)rt_object_allocate(RT_Object_Class_Thread, name);stack_start = (void *)RT_KERNEL_MALLOC(stack_size);_thread_init(thread, name, entry, parameter, stack_start, stack_size, priority, tick);return thread;
}rt_object_t rt_object_allocate(enum rt_object_class_type type, const char *name)
{struct rt_object *object;rt_base_t level;struct rt_object_information *information;// 获取对应类型对象管理结构体information = rt_object_get_information(type);// 为句柄申请空间object = (struct rt_object *)RT_KERNEL_MALLOC(information->object_size);rt_memset(object, 0x0, information->object_size);object->type = type;object->flag = 0;rt_strncpy(object->name, name, RT_NAME_MAX);// 将新创建的链表加入到对象管理结构体的链表中rt_list_insert_after(&(information->object_list), &(object->list));return object;
}



list_find_init(用于遍历对象)

在FinSH命令行插件中,有查看对象状态的功能,如list_thread

其示意代码如下:

typedef struct
{rt_list_t *list;rt_list_t **array;rt_uint8_t type;int nr;     // 最大个数int nr_out; // 实际个数
} list_get_next_t;static void list_find_init(list_get_next_t *p, rt_uint8_t type, rt_list_t **array, int nr)
{struct rt_object_information *info;rt_list_t *list;// 返回对应的对象管理结构体info = rt_object_get_information((enum rt_object_class_type)type);// 找到最关键的链表list = &info->object_list;p->list = list;p->type = type;p->array = array;p->nr = nr;p->nr_out = 0;
}long list_thread(void)
{list_get_next_t find_arg;rt_list_t *obj_list[LIST_FIND_OBJ_NR];rt_list_t *next = (rt_list_t *)RT_NULL;list_find_init(&find_arg, RT_Object_Class_Thread, obj_list, sizeof(obj_list) / sizeof(obj_list[0]));do{// 这里给obj_list数组赋值,里面存着每个对象的链表// 这里一次最多获取LIST_FIND_OBJ_NR个对象next = list_get_next(next, &find_arg);{int i;// 循环打印对象信息for (i = 0; i < find_arg.nr_out; i++){struct rt_object *obj;struct rt_thread *thread;// 通过结构体中的元素找到结构体本身,第一章中有详细讲解rt_list_entryobj = rt_list_entry(obj_list[i], struct rt_object, list);thread = (struct rt_thread *)obj;// 打印相关信息}}} while (next != (rt_list_t *)RT_NULL);return 0;
}



rt_object 结构体

基础的结构体,所有内核对象结构体的开头都会定义struct rt_object parent;

但是不知道为什么rt_thread结构体开头把rt_object 展开了,但是效果和offset都是一致的

/*** Base structure of Kernel object*/
struct rt_object
{char       name[RT_NAME_MAX];                       /**< name of kernel object */rt_uint8_t type;                                    /**< type of kernel object */rt_uint8_t flag;                                    /**< flag of kernel object */rt_list_t  list;                                    /**< list node of kernel object */
};
typedef struct rt_object *rt_object_t;                  /**< Type for kernel objects. */

http://www.dtcms.com/wzjs/388878.html

相关文章:

  • 禄劝彝族苗族网站建设常用的网络营销推广方法有哪些
  • 北京网站建设方案排名推手平台哪个靠谱
  • 广州知名网站建设后台管理便捷陕西新站seo
  • 廊坊市固安县建设局网站正规的微信推广平台
  • 中国机械加工网官方百度网站排名优化价格
  • 学校网站建设用哪个系统站长工具关键词挖掘
  • 沈阳做网站的公司有哪些地推app推广赚佣金
  • wordpress 报名表单微信小程序排名关键词优化
  • 杭州设计企业网站高端公司搭建网站工具
  • 网页布局排版沈阳seo网站推广
  • ps做网站视图大小chatgpt 链接
  • wordpress主题虚拟资源交易平台seo关键词分析
  • 书法网站建站目标百度2022年版本下载
  • 公司做网站价格湘潭seo公司
  • 廊坊cms模板建站网络营销策划ppt
  • 织梦网站上传新闻腾讯云域名注册
  • 服装网站建设与规划互联网推广引流
  • 福州大学学生网站建设和学生上网管理条例品牌营销策划机构
  • 福建工程建设管理中心网站seo中国是什么
  • 门户网站建设考核总结短视频精准获客
  • 在别的公司做的网站可以转走吗seo排名课程咨询电话
  • 用php做注册网站的代码深圳全网推广公司
  • 网站开发建设需要什么淘宝推广费用多少钱一天
  • 小程序云开发收费指定关键词排名优化
  • 门户网站建设方法想做seo哪里有培训的
  • ajaxjsp网站开发从入门到精通网络优化大师下载
  • 嘉兴关键词优化报价seo搜索优化是什么意思
  • 怎么做才能提高网站权重下载百度浏览器
  • 网站浮动qq客服代码佛山网站优化服务
  • 软件商店下载官方seo网络推广培训