继续上一篇, ec_master.ko加载后只是初始化了主栈的一些数据和状态,并未运行主栈,因为此时网络并未启动,主栈无法和从站通信。当我们加载实时网卡驱动时,此时建立了网络连接,就可以启动主栈来根据连接的从站做信息的同步,这里以e1000网卡为例:
加载网卡驱动时会调用主栈ecdev_open函数,来启动主栈idle线程
下面主要分析一下idle的运行流程
我们只分析正常流程,报文的收发我们以后分析介绍,这里只介绍处理流程
idle线程中运行主栈状态机,之前我们说过主栈初始化把fsm置为ec_fsm_master_state_start
所以主栈状态机会从start状态开始运行。
是不是很熟悉,主栈发出了第一个读从站AL status(0x0130)的广播报文。接着状态机运行ec_fsm_master_state_broadcast处理函数。
当接收到从站回复的报文,确认当前总线有从站,ec_fsm_master_state_broadcast中就开启从站扫描流程。具体的流程可以根据状态机的切换一步一步的往后分析。
扫描从站就启动了从站的状态机,从站状态机可以通过位置寻址来和指定的从站进行信息交互了。