本文欢迎引用,转载。
引用,转载请标明出处!
调试完毕源码将上传到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
}
编译选项设置
未完,待续