在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
}

 

編譯選項設置

 

未完,待續


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com