在LwIP 协议栈移植 Snap 7

本文欢迎引用,转载。

引用,转载请标明出处!

调试完毕源码将上传到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
}

未完,待续