There are a few places noted below where the code import rules aren't being followed.

On 9/8/2022 11:34, Duc Doan wrote:
---
  rtemslwip/stm32f4/stm32f4_lwip.c |  14 ++++
  rtemslwip/stm32f4/stm32f4_lwip.h |   9 +++
  stm32/ethernetif.c               | 110 ++++++++++++++++++++++++++++++-
  stm32/ethernetif.h               |   8 ++-
  stm32/lwip.h                     |   2 +
  5 files changed, 140 insertions(+), 3 deletions(-)
  create mode 100644 rtemslwip/stm32f4/stm32f4_lwip.c
  create mode 100644 rtemslwip/stm32f4/stm32f4_lwip.h

diff --git a/rtemslwip/stm32f4/stm32f4_lwip.c b/rtemslwip/stm32f4/stm32f4_lwip.c
new file mode 100644
index 0000000..1f4f07e
--- /dev/null
+++ b/rtemslwip/stm32f4/stm32f4_lwip.c
@@ -0,0 +1,14 @@
+#include "stm32f4_lwip.h"
+
+extern ETH_HandleTypeDef heth;
+
+__attribute__((weak)) void Error_Handler(void) {
+    __disable_irq();
+    while (1)
+    {
+    }
+}
+
+void ETH_IRQHandler(void) {
+    HAL_ETH_IRQHandler(&heth);
+}
diff --git a/rtemslwip/stm32f4/stm32f4_lwip.h b/rtemslwip/stm32f4/stm32f4_lwip.h
new file mode 100644
index 0000000..8a2b03a
--- /dev/null
+++ b/rtemslwip/stm32f4/stm32f4_lwip.h
@@ -0,0 +1,9 @@
+#ifndef LIPLWIP_RTEMSLWIP_STM32F4_STM32F4_LWIP_H
+#define LIPLWIP_RTEMSLWIP_STM32F4_STM32F4_LWIP_H
+
+#include <stm32f4xx_hal.h>
+
+void ErrorHandler(void);
+void ETH_IRQHandler(void);
+
+#endif /* LIPLWIP_RTEMSLWIP_STM32F4_STM32F4_LWIP_H */
diff --git a/stm32/ethernetif.c b/stm32/ethernetif.c
index 7a82c51..e71ac8f 100644
--- a/stm32/ethernetif.c
+++ b/stm32/ethernetif.c
@@ -19,7 +19,12 @@
  /* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
+#ifndef __rtems__
  #include "main.h"
+#else
+#include <bsp.h>
+#include <bsp/irq.h>
+#endif /* __rtems__ */
  #include "lwip/opt.h"
  #include "lwip/timeouts.h"
  #include "netif/ethernet.h"
@@ -28,7 +33,9 @@
  #include "ethernetif.h"
  #include "dp83848.h"
  #include <string.h>
+#ifndef __rtems__
  #include "cmsis_os.h"
+#endif /* __rtems__ */
  #include "lwip/tcpip.h"
/* Within 'USER CODE' section, code will be kept by default at each generation */
@@ -38,7 +45,12 @@
/* Private define ------------------------------------------------------------*/
  /* The time to block waiting for input. */
+#ifndef __rtems__
  #define TIME_WAITING_FOR_INPUT ( portMAX_DELAY )
+#else
+#define TIME_WAITING_FOR_INPUT ( RTEMS_NO_TIMEOUT )
+#endif /* __rtems__ */
+
  /* USER CODE BEGIN OS_THREAD_STACK_SIZE_WITH_RTOS */
  /* Stack size of the interface thread */
  #define INTERFACE_THREAD_STACK_SIZE ( 350 )
@@ -109,12 +121,20 @@ ETH_DMADescTypeDef  DMATxDscrTab[ETH_TX_DESC_CNT]; /* 
Ethernet Tx DMA Descriptor
/* USER CODE END 2 */ +#ifndef __rtems__
  osSemaphoreId RxPktSemaphore = NULL;   /* Semaphore to signal incoming 
packets */
  osSemaphoreId TxPktSemaphore = NULL;   /* Semaphore to signal transmit packet 
complete */
+#else
+rtems_id RxPktSemaphore;   /* Semaphore to signal incoming packets */
+rtems_id TxPktSemaphore;   /* Semaphore to signal transmit packet complete */
+#endif /* __rtems__ */
/* Global Ethernet handle */
  ETH_HandleTypeDef heth;
  ETH_TxPacketConfig TxConfig;
+#ifdef __rtems__
+static uint8_t *MACAddr;
+#endif /* __rtems__ */
/* Private function prototypes -----------------------------------------------*/
  int32_t ETH_PHY_IO_Init(void);
@@ -144,7 +164,11 @@ void pbuf_free_custom(struct pbuf *p);
    */
  void HAL_ETH_RxCpltCallback(ETH_HandleTypeDef *handlerEth)
  {
+#ifndef __rtems__
    osSemaphoreRelease(RxPktSemaphore);
+#else
+  rtems_semaphore_release(RxPktSemaphore);
+#endif /* __rtems__ */
  }
  /**
    * @brief  Ethernet Tx Transfer completed callback
@@ -153,7 +177,11 @@ void HAL_ETH_RxCpltCallback(ETH_HandleTypeDef *handlerEth)
    */
  void HAL_ETH_TxCpltCallback(ETH_HandleTypeDef *handlerEth)
  {
+#ifndef __rtems__
    osSemaphoreRelease(TxPktSemaphore);
+#else
+  rtems_semaphore_release(TxPktSemaphore);
+#endif /* __rtems__ */
  }
  /**
    * @brief  Ethernet DMA transfer error callback
@@ -164,12 +192,21 @@ void HAL_ETH_ErrorCallback(ETH_HandleTypeDef *handlerEth)
  {
    if((HAL_ETH_GetDMAError(handlerEth) & ETH_DMASR_RBUS) == ETH_DMASR_RBUS)
    {
-     osSemaphoreRelease(RxPktSemaphore);
It looks like this was just an accidental spacing issue.
+#ifndef __rtems__
+    osSemaphoreRelease(RxPktSemaphore);
+#else
+    rtems_semaphore_release(RxPktSemaphore);
+#endif /* __rtems__ */
    }
  }
/* USER CODE BEGIN 4 */
-
Removed newline.
+#ifdef __rtems__
+void set_mac_addr(uint8_t *mac_addr)
+{
+  MACAddr = mac_addr;
+}
+#endif /* __rtems__ */
  /* USER CODE END 4 */
/*******************************************************************************
@@ -186,15 +223,20 @@ static void low_level_init(struct netif *netif)
  {
    HAL_StatusTypeDef hal_eth_init_status = HAL_OK;
  /* USER CODE BEGIN OS_THREAD_ATTR_CMSIS_RTOS_V2 */
+#ifndef __rtems__
    osThreadAttr_t attributes;
+#endif /* __rtems__ */
  /* USER CODE END OS_THREAD_ATTR_CMSIS_RTOS_V2 */
    uint32_t duplex, speed = 0;
    int32_t PHYLinkState = 0;
    ETH_MACConfigTypeDef MACConf = {0};
    /* Start ETH HAL Init */
+#ifndef __rtems__
     uint8_t MACAddr[6] ;
+#endif /* __rtems__ */
    heth.Instance = ETH;
+#ifndef __rtems__
    MACAddr[0] = 0x02;
    MACAddr[1] = 0x00;
    MACAddr[2] = 0x00;
@@ -202,6 +244,9 @@ static void low_level_init(struct netif *netif)
    MACAddr[4] = 0x00;
    MACAddr[5] = 0x01;
    heth.Init.MACAddr = &MACAddr[0];
+#else
+  heth.Init.MACAddr = MACAddr;
+#endif /* __rtems__ */
    heth.Init.MediaInterface = HAL_ETH_RMII_MODE;
    heth.Init.TxDesc = DMATxDscrTab;
    heth.Init.RxDesc = DMARxDscrTab;
@@ -248,18 +293,48 @@ static void low_level_init(struct netif *netif)
    #endif /* LWIP_ARP */
/* create a binary semaphore used for informing ethernetif of frame reception */
+#ifndef __rtems__
    RxPktSemaphore = osSemaphoreNew(1, 1, NULL);
+#else
+  rtems_semaphore_create(
+    rtems_build_name('R', 'x', 'p', 'k'),
+    1,
+    RTEMS_SIMPLE_BINARY_SEMAPHORE,
+    0,
+    &RxPktSemaphore
+  );
+#endif /* __rtems__ */
/* create a binary semaphore used for informing ethernetif of frame transmission */
+#ifndef __rtems__
    TxPktSemaphore = osSemaphoreNew(1, 1, NULL);
+#else
+  rtems_semaphore_create(
+    rtems_build_name('T', 'x', 'p', 'k'),
+    1,
+    RTEMS_SIMPLE_BINARY_SEMAPHORE,
+    0,
+    &TxPktSemaphore
+  );
+#endif /* __rtems__ */
/* create the task that handles the ETH_MAC */
  /* USER CODE BEGIN OS_THREAD_NEW_CMSIS_RTOS_V2 */
+#ifndef __rtems__
    memset(&attributes, 0x0, sizeof(osThreadAttr_t));
    attributes.name = "EthIf";
    attributes.stack_size = INTERFACE_THREAD_STACK_SIZE;
    attributes.priority = osPriorityRealtime;
    osThreadNew(ethernetif_input, netif, &attributes);
+#else
+  sys_thread_new(
+    "ethernetif_input_thread",
+    ethernetif_input,
+    netif,
+    RTEMS_MINIMUM_STACK_SIZE,
+    DEFAULT_THREAD_PRIO
+  );
+#endif /* __rtem__ */
  /* USER CODE END OS_THREAD_NEW_CMSIS_RTOS_V2 */
/* USER CODE BEGIN PHY_PRE_CONFIG */
@@ -313,6 +388,15 @@ static void low_level_init(struct netif *netif)
      MACConf.Speed = speed;
      HAL_ETH_SetMACConfig(&heth, &MACConf);
+#ifdef __rtems__
+    rtems_interrupt_handler_install(
+            STM32F4_IRQ_ETH,
+            NULL,
+            RTEMS_INTERRUPT_UNIQUE,
+            HAL_ETH_IRQHandler,
+            &heth
+    );
+#endif /* __rtems__ */
      HAL_ETH_Start_IT(&heth);
      netif_set_up(netif);
      netif_set_link_up(netif);
@@ -387,7 +471,12 @@ static err_t low_level_output(struct netif *netif, struct 
pbuf *p)
    pbuf_ref(p);
HAL_ETH_Transmit_IT(&heth, &TxConfig);
+#ifndef __rtems__
    while(osSemaphoreAcquire(TxPktSemaphore, TIME_WAITING_FOR_INPUT)!=osOK)
+#else
+  while (rtems_semaphore_obtain(TxPktSemaphore, RTEMS_DEFAULT_OPTIONS,
+          TIME_WAITING_FOR_INPUT) != RTEMS_SUCCESSFUL)
+#endif /* __rtems__ */
{
    }
@@ -433,7 +522,12 @@ void ethernetif_input(void* argument)
for( ;; )
    {
+#ifndef __rtems__
      if (osSemaphoreAcquire(RxPktSemaphore, TIME_WAITING_FOR_INPUT) == osOK)
+#else
+    if (rtems_semaphore_obtain(RxPktSemaphore, RTEMS_DEFAULT_OPTIONS,
+            TIME_WAITING_FOR_INPUT) == RTEMS_SUCCESSFUL)
+#endif /* __rtems__ */
      {
        do
        {
@@ -545,12 +639,17 @@ void pbuf_free_custom(struct pbuf *p)
    if (RxAllocStatus == RX_ALLOC_ERROR)
    {
      RxAllocStatus = RX_ALLOC_OK;
+#ifndef __rtems__
      osSemaphoreRelease(RxPktSemaphore);
+#else
+    rtems_semaphore_release(RxPktSemaphore);
+#endif /* __rtems__ */
    }
  }
/* USER CODE BEGIN 6 */ +#ifndef __rtems__
  /**
  * @brief  Returns the current time in milliseconds
  *         when LWIP_TIMERS == 1 and NO_SYS == 1
@@ -561,6 +660,7 @@ u32_t sys_now(void)
  {
    return HAL_GetTick();
  }
+#endif /* __rtems__ */
/* USER CODE END 6 */ @@ -611,8 +711,10 @@ void HAL_ETH_MspInit(ETH_HandleTypeDef* ethHandle)
      HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/* Peripheral interrupt init */
+#ifndef __rtems__
      HAL_NVIC_SetPriority(ETH_IRQn, 5, 0);
      HAL_NVIC_EnableIRQ(ETH_IRQn);
+#endif /* __rtems__ */
    /* USER CODE BEGIN ETH_MspInit 1 */
/* USER CODE END ETH_MspInit 1 */
@@ -799,7 +901,11 @@ void ethernet_link_thread(void* argument)
/* USER CODE END ETH link Thread core code for User BSP */ +#ifndef __rtems__
      osDelay(100);
+#else
+    sys_arch_delay(100);
+#endif /* __rtems__ */
    }
  }
diff --git a/stm32/ethernetif.h b/stm32/ethernetif.h
index 85c1acf..552671a 100644
--- a/stm32/ethernetif.h
+++ b/stm32/ethernetif.h
@@ -23,11 +23,15 @@
#include "lwip/err.h"
  #include "lwip/netif.h"
+#ifndef __rtems__
  #include "cmsis_os.h"
+#endif /* __rtems__ */
/* Within 'USER CODE' section, code will be kept by default at each generation */
  /* USER CODE BEGIN 0 */
-
Removed newline.
+#ifdef __rtems__
+void set_mac_addr(uint8_t *mac_addr);
+#endif /* __rtems__ */
  /* USER CODE END 0 */
/* Exported functions ------------------------------------------------------- */
@@ -38,7 +42,9 @@ void ethernet_link_thread(void* argument );
void Error_Handler(void);
  u32_t sys_jiffies(void);
+#ifndef __rtems__
  u32_t sys_now(void);
+#endif /* __rtems__ */
/* USER CODE BEGIN 1 */ diff --git a/stm32/lwip.h b/stm32/lwip.h
index 02df90e..fbaf786 100644
--- a/stm32/lwip.h
+++ b/stm32/lwip.h
@@ -47,6 +47,7 @@
  /* Global Variables 
----------------------------------------------------------*/
  extern ETH_HandleTypeDef heth;
+#ifndef __rtems__
  /* LWIP init function */
  void MX_LWIP_Init(void);
@@ -62,6 +63,7 @@ void MX_LWIP_Process(void);
  /* USER CODE END 1 */
  #endif /* WITH_RTOS */
+#endif /* __rtems__ */
  #ifdef __cplusplus
  }
  #endif
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to