本文歡迎引用,轉載。 引用,轉載請標明出處! 調試完畢源碼將上傳到GitHub 為了嵌入式系統與STEP 7 PLC 通過S7 協議通訊,嘗試移植 Snap 7 到STM32F407 cpu 上。 今天基本編譯通過,尚未通電調試。 核心技術要點,及方案如下 1。測試系統構建(待續) 2。代碼修改 A ...
本文歡迎引用,轉載。
引用,轉載請標明出處!
調試完畢源碼將上傳到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 }
未完,待續