ethercat技巧总结
1.链表使用:链表的使用是基于指针的,可以提前定义好每个使用类的第一个元素作为一个链表头(即prev和next信息),然后使用指针强制转换就可以对链表头和真实类之间的互相转换,因此只要再加一个类型的元素,就可以实现将不同类别连接在同一个链表上的操作。
当然,也可以将链表头和链表内容进行分离,即将链表头、链表内容需要空间大小提取出来到一个链表头结构体中,然后将链表内容第一个元素定义为链表内容类型(为了在将所有的链表内容组装到一段连续空间的时候也可以进行正确提取,即判断类型使用强制转换然后移动当前指针即可)。
当然针对链表的最后一个元素可以使用一个结束标志来进行处理,这样就不会越界。
2.空间逻辑地址使用:可以在内存中先申请一大块内存,而后基于获取到的内存块进行内存分配,这个时候就不需要再进行malloc过程,只需要将需要的内存部分(一般是结构体一类已经大小确定的对象)的首地址进行返回即可,这样的话,之前分配的内存在释放时,就无法进行再次使用,需要再看一下如何解决这个问题。
3.状态机:状态机中的每个状态函数都应该包含两个过程,第一个就是状态机正常的处理函数,第二个就是将状态切换到下一个状态的状态进入函数(通常直接修改状态函数指向指针即可,但是有时可能需要一定的初始化过程)。