在LwIP 协议栈移植 Snap 7

时间:2022-06-30 16:20:41

本文欢迎引用,转载。

引用,转载请标明出处!

调试完毕源码将上传到GitHub

为了嵌入式系统与STEP 7 PLC 通过S7 协议通讯,尝试移植 Snap 7 到STM32F407 cpu 上。

今天基本编译通过,尚未通电调试。

核心技术要点,及方案如下

1。测试系统构建(待续)

在LwIP 协议栈移植 Snap 7

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

 

未完,待续