通过看TencentOs tiny github附带的API源码学习课程,竟然还有视频终于都AT框架的实现有更彻底的认识,如果要明白SAL层和AT框架如何与模组进行同步异步通信的必须学习两个知识,信号量和互斥锁。
信号量和互斥锁的原理百度千篇一律,我从视频和博客针对TencentOS tiny源码的分析,对信号量和互斥锁才是彻底掌握。
我以以下tencentOs里AT框架源码解释一下互斥锁,我们最关心的就是AT框架如何利用AT指令与模组进行通信,这里AT框架提供两个发指令API:
1) tos_at_cmd_exec 发送一条指令,取得串口所有权后,发送完即返回
2)tos_at_cmd_exec_until 发送一条指令,直到捡到期望值echo对象后才返回
先从tos_at_cmd_exec解释起,这个API只用到了互斥锁,就是在获取uart口这个临界资源时,tos_mutex_pend获取锁,当获取不到时任务则被挂起等待其他任务释放互斥uart锁,当代码能继续往下运行代码已经获取到uart锁了,当数据发送出去后,任务at_parser及时处理模组串口指令回复,赋值给echo对象,达到同步效果,通过互斥锁的挂起,实现代码看似顺序执行,无需等待即拿到模组串口指令回复。
附带tos_at_cmd_exec接口源码:
__API__ int tos_at_cmd_exec(at_echo_t *echo, uint32_t timeout, const char *cmd, ...)
{
int ret = 0;
va_list args;
if (echo) {
at_echo_attach(echo);
}
va_start(