打印
[其他ST产品]

ST源码分析-st_thread_create - 弦外之音

[复制链接]
楼主: 9dome猫
手机看帖
扫描二维码
随时随地手机跟帖
81
9dome猫|  楼主 | 2023-4-21 23:22 | 只看该作者 回帖奖励 |倒序浏览
上面的代码有点绕,但实际上就是把 协程 的 links 插进去 全局管理器 _st_this_vp.run_q ,他们都是 _st_clist 结构。 _st_clist 结构 在很多地方都有用到。

使用特权

评论回复
82
9dome猫|  楼主 | 2023-4-21 23:22 | 只看该作者
这个 _st_clist 的设计比较精巧,定义如下:

typedef struct _st_clist {
  struct _st_clist *next;
  struct _st_clist *prev;
} _st_clist_t;

使用特权

评论回复
83
9dome猫|  楼主 | 2023-4-21 23:23 | 只看该作者
没错,只有一前一后 两个字段。实际上 next 存的是 某个协程的 links 字段的内存地址。因为 _st_thread 内部的字段的内存地址都是连续的,所以根据 links 字段的内存地址 做 offset 就能定位到 _st_thread 的头部的地址。有一个封装好的宏函数 _ST_THREAD_PTR() ,根据 links 的内存地址找到 协程。如下:

#define _ST_THREAD_PTR(_qp)         \
    ((_st_thread_t *)((char *)(_qp) - offsetof(_st_thread_t, links)))

使用特权

评论回复
84
9dome猫|  楼主 | 2023-4-21 23:23 | 只看该作者
重新看 回去 st_init() ,st_thread_create 函数实际上就是创建了一个结构体变量 _st_thread_t pthread,这个结构体里面保存了,pthread->start 函数未执行之前的寄存器信息。

st_thread_create 函数分析完毕。

使用特权

评论回复
85
9dome猫|  楼主 | 2023-4-21 23:23 | 只看该作者
总结:

1,申请内存,拿出 336 字节 初始为 _st_thread_t 结构,后续这块内存的管理通过 _st_thread_t 结构进行管理,例如 :thread->private_data,thread->stack。

使用特权

评论回复
86
9dome猫|  楼主 | 2023-4-21 23:23 | 只看该作者
2,然后用汇编 把寄存器信息保存进去 thread->context (jmp_buf) 。

使用特权

评论回复
87
9dome猫|  楼主 | 2023-4-21 23:23 | 只看该作者
其实分析到这里,大家会发现,st_thread_create() 虽然创建了协程,但是并没有开始运行协程。从 lookupdns 程序看来。创建了两个协程,如下:

1,st_thread_create(_st_idle_thread_start,...)

2,st_thread_create(do_resolve,...)

但是这两个函数 _st_idle_thread_start() ,跟 do_resolve() 并没有开始运行。那是什么时候开始运行 呢?在 st_thread_exit() 里面。

使用特权

评论回复
88
9dome猫|  楼主 | 2023-4-21 23:24 | 只看该作者
扩展知识:

1,GCC 编译的时候加上-gdwarf-2 和 -g3 编译选项可以打印宏。

使用特权

评论回复
89
Pulitzer| | 2024-6-1 07:30 | 只看该作者

在信号线中串联小电阻其主要目的是对引脚的保护

使用特权

评论回复
90
童雨竹| | 2024-6-1 09:26 | 只看该作者

驱动脉冲变压器原边时,

使用特权

评论回复
91
Wordsworth| | 2024-6-1 10:29 | 只看该作者

并且衡量电阻受温度影响大小的物理量是温度系数

使用特权

评论回复
92
公羊子丹| | 2024-6-1 12:25 | 只看该作者

开模的话,模具不会塌踏。。

使用特权

评论回复
93
万图| | 2024-6-1 13:28 | 只看该作者

就导通接地放掉

使用特权

评论回复
94
Uriah| | 2024-6-1 14:31 | 只看该作者

需要靠近在外部添加一个钳位二极管

使用特权

评论回复
95
帛灿灿| | 2024-6-1 16:27 | 只看该作者

ESD电压通过接地放掉

使用特权

评论回复
96
Bblythe| | 2024-6-1 17:30 | 只看该作者

电阻消耗过电压的能量

使用特权

评论回复
97
周半梅| | 2024-6-1 19:26 | 只看该作者

当电路正常工作时,它处于截止状态(高阻态)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则