- /* Find mappings and program syncmanagers
- * 查找映射和设置同步管理器
- * @param[in] context = context struct
- * 上下文结构体
- * @param[in] group = group to map, 0 = all groups
- * 要映射的组,0=所有组
- */
- static void ecx_config_find_mappings(ecx_contextt *context, uint8 group)
- {
- int
- thrn, /* 调用线程索引 */
- thrc;/* 线程计数 */
- uint16 slave;/* 从站编号 */
-
- for (thrn/* 调用线程索引 */ = 0;
- thrn/* 调用线程索引 */ < EC_MAX_MAPT;/* 定义映射中的最大并发线程数 */
- thrn++/* 调用线程索引 */)
- {
- ecx_mapt/* 多线程映射结构体列表 */[thrn/* 调用线程索引 */].running/* 运行 */ = 0;
- }
- /* find CoE and SoE mapping of slaves in multiple threads *//* 查找多个线程中从站的 CoE 和 SoE 映射 */
- for (slave /* 从站编号 */ = 1;
- slave/* 从站编号 */ <= *(context->slavecount);/* 从站数量[从站个数] */
- slave++/* 从站编号 */)
- {
- if (!group/* 要映射的组,0 = 所有组 */||
- (group/* 要映射的组,0 = 所有组 */ ==
- context->slavelist/* 从站列表 */[slave/* 从站编号 */].group/* 组(group) */))
- {
- #if EC_MAX_MAPT/* 定义映射中的最大并发线程数 */ > 1
- /* multi-threaded version *//* 多线程版本 */
- while ((thrn/* 调用线程索引 */
- = ecx_find_mapt(/*多线程版本下查找调用线程索引*/)) < 0)
- {
- /* 睡眠函数,休眠到要求的时间(指定的延迟时间[单位:usec]) */
- osal_usleep(1000);
- }
- ecx_mapt/* 多线程映射结构体列表 */[thrn/* 调用线程索引 */].context /* 上下文结构体 */
- = context;/* 上下文结构体 */
- ecx_mapt/* 多线程映射结构体列表 */[thrn/* 调用线程索引 */].slave/* 从站编号 */
- = slave;/* 从站编号 */
- ecx_mapt/* 多线程映射结构体列表 */[thrn/* 调用线程索引 */].thread_n /* 调用线程索引 */
- = thrn;/* 调用线程索引 */
- ecx_mapt/* 多线程映射结构体列表 */[thrn/* 调用线程索引 */].running/* 运行 */ = 1;
- osal_thread_create(/* 创建线程 *//* create thread */
- &(ecx_threadh[thrn/* 调用线程索引 */]),
- 128000, /* stacksize 线程堆栈大小[单位:字节数] */
- &ecx_mapper_thread,// 多线程版本 查找从站映射
- &(ecx_mapt/* 多线程映射结构体列表 */[thrn/* 调用线程索引 */]));
- #else
- /* serialised version *//* 序列化版本 */
- ecx_map_coe_soe(// 在多线程中查找slave的CoE和SoE映射
- context,/* 上下文结构体 */
- slave,/* 从站编号 */
- 0);/* 调用线程索引 */
- #endif
- }
- }
- /* wait for all threads to finish *//* 等待所有线程结束 */
- do
- {
- thrc/* 线程计数 */
- = ecx_get_threadcount(/* 获取运行中的线程计数 */);
- if (thrc/* 线程计数 */)
- {
- /* 睡眠函数,休眠到要求的时间(指定的延迟时间[单位:usec]) */
- osal_usleep(1000);
- }
- } while (thrc/* 线程计数 */);
- /* find SII mapping of slave and program SM */
- /* 查找从站的 SII 映射和设置 SM */
- for (slave /* 从站编号 */ = 1;
- slave/* 从站编号 */ <= *(context->slavecount);/* 从站数量[从站个数] */
- slave++/* 从站编号 */)
- {
- if (!group/* 要映射的组,0 = 所有组 */ ||
- (group/* 要映射的组,0 = 所有组 */ ==
- context->slavelist/* 从站列表 */[slave/* 从站编号 */].group/* 组(group) */))
- {
- ecx_map_sii(// 查找从站的 SII 映射
- context,/* 上下文结构体 */
- slave);/* 从站编号 */
- ecx_map_sm(// 查找从站的 SII 映射和设置 SM
- context, /* 上下文结构体 */
- slave);/* 从站编号 */
- }
- }
- }