在LwIP 协议栈移植 Snap 7
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在LwIP 协议栈移植 Snap 7相关的知识,希望对你有一定的参考价值。
本文欢迎引用,转载。
引用,转载请标明出处!
调试完毕源码将上传到GitHub
为了嵌入式系统与STEP 7 PLC 通过S7 协议通讯,尝试移植 Snap 7 到STM32F407 cpu 上。
今天基本编译通过,尚未通电调试。
核心技术要点,及方案如下
1。测试系统构建(待续)
2。代码修改
A.修改文件snap_msgsock.cpp 开始部分,为以下内容
#include <stdint.h> #include "lwip/sockets.h" #include "snap_msgsock.h" #include <string.h>
B.修改文件snap_sysutils.cpp为以下内容,重点是对 timeGetTime() 的支持
#include "snap_sysutils.h" #include "stm32f4xx_hal.h" #ifdef OS_OSX int clock_gettime(int clk_id, struct timespec* t) { struct timeval now; int rv = gettimeofday(&now, NULL); if (rv) return rv; t->tv_sec = now.tv_sec; t->tv_nsec = now.tv_usec * 1000; return 0; } #endif //--------------------------------------------------------------------------- longword SysGetTick() { #ifdef OS_WINDOWS return timeGetTime(); #else #ifdef STM32F407xx return HAL_GetTick(); #else struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); return (longword) (ts.tv_sec * 1000) + (ts.tv_nsec / 1000000); #endif #endif } //--------------------------------------------------------------------------- void SysSleep(longword Delay_ms) { #ifdef OS_WINDOWS Sleep(Delay_ms); #else #ifdef STM32F407xx HAL_Delay(Delay_ms); #else struct timespec ts; ts.tv_sec = (time_t)(Delay_ms / 1000); ts.tv_nsec =(long)((Delay_ms - ts.tv_sec) * 1000000); nanosleep(&ts, (struct timespec *)0); #endif #endif }
未完,待续
以上是关于在LwIP 协议栈移植 Snap 7的主要内容,如果未能解决你的问题,请参考以下文章
Lwip:原生态的Linux socket应用如何移植到Lwip上