threads国内用法介绍
就在threads上线之后,很快就有了将近1亿的用户注册,很多用户十分关心这个最新的软件到底和推有哪里不同,其实二者整体来看*都是差不多的
反而,[#7709][2]在传输这种长度伸缩弹性大的数据时,浪费比较严重(50%),`rt_mq_send``rt_mq_recv`中也至少要拷贝两次大量消息数据。
接触rt-thread已有半年,混*也5个半月了,期间遇到过各种奇奇怪怪的棘手问题,有过尴尬,也自信曾经提供过比较妙的应对方案。所以产生了将一些典型的使用技巧汇总分享出来的想法,遂有此篇。
而我想告诉大家的是,`Text`的`content`指针可以携带更多数据,可以远远超过`sizeof(UserMessage)`大小的消息。同时,`rt_mq_send``rt_mq_recv`中拷贝消息体的时候,大小仍然是`sizeof(UserMessage)`,不会因为传递消息量大增加数据拷贝开销。
线程栈大小,这是一个极其隐秘的坑,很多人掉进去却没发觉。但是,一个线程分配多少栈空间完全需要经验,需依据实际运行情况而定。往往实际上,**我们需要给每一个线程分配足够的线程栈空间**。因此,当线程数量上来以后我们就会发现,为了保证每一个线程正常运行而“足够”分配的内存很多被“浪费”掉了,因为没有实际使用到,其作用是“保险性”的。
threadlocal的用途和用法
两种方式:一种是通过配置,启用RT_USING_DFS_MNTTABLE。这种方式需要使用者自己实现一个结构体数组`conststructdfs_mount_tblmount_table[]`。
其中,INIT_BOARD_EXPORT运行在任务调度器启动前,也是唯一任务调度器运行前被执行的。这里是外设初始化配置阶段。
虽然`rt_mq_send``rt_mq_send_wait``rt_mq_urgent``rt_mq_recv`几个api有size参数,但是请严格按照`rt_mq_init``rt_mq_create`中的msg_size参数值传递相等的实参值。***千万不要随意改变size参数的数值***。
*mysterywolf大佬发现的这个命令,像捡到一个宝,不习惯menuconfig的童鞋,喜欢studio配置可以点点点的童鞋,你们可以回来继续使用env啦!
在嵌入式里很多存储设备是焊接到电路板上的存储芯片。如果我们有在存储芯片上挂载文件系统的需求,出厂生产必须有方式对存储设备进行格式化。为此,可能难倒一大批流水线工人。可以使用下面的流程进行挂载。
Sql中CAST用法介绍
还有一种情况,有人说ARMv7-M架构设计的时候,0xC0000000-0xDFFFFFFF这个地址段默认要求必须4字节(数据总线宽度)对齐访问。如果这片内存有个压缩的结构体变量,对此变量读写也可能出现unalignedaccess错误。解决方法如下:
这些阶段并不是完全固定,有些是可以调整的,例如,我曾经把lcd的初始化从DEVICE提前到BOARD,而把emwin的初始化放到PREV。还在ENV阶段初始化了一些消息队列等等。
rt-thread内核定义了软件定时器,和硬件定时器不同,硬件定时器需要占用一个定时器外设,还有各种比较、捕获等功能。软件定时器仅仅是简单的设定一个时间,时间timeout的时候执行我们设定的回调函数。
评论列表