Skip to content

Stm32 ethernet lib #38

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 21 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions cores/arduino/chip.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@
#include "usb_interface.h"
#endif //USBCON

#include "ethernet.h"

/* Define attribute */
#if defined ( __GNUC__ ) /* GCC CS3 */
#define WEAK __attribute__ ((weak))
Expand Down
3 changes: 3 additions & 0 deletions cores/arduino/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ int main( void )

for (;;)
{
// Define by Ethernet library. It is defined as __weak.
stm32_eth_scheduler();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why doing it here in the core rather than in the loop ?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the idle task for handle timer and data reception. It must be called as much as possible.
I put it here to be sure it is called at least one time per loop.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The same would happen if you put this call in the loop, so this does not answer my question.
Also this seems here that it will be called for each loop for a board that supports it, even if I don't use Ethernet , is that right ?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This function is defined as weak in ethernet.c, when the library NativeEthernet is not included, this function is empty.
And to call it in the loop, we must create a function that the user should call (this function will not be refered in the Arduino documentation).
I thought it was easier to leave that in background.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK - this is maybe acceptable if this has no impact when the library is not included. This may be explained as well in the comments

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will this break if freertos or the arduino Scheduler library is used in combination with this library?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@RickKimball

I don't know because I didn't study the LwIP stack in case of an "operating system". The NativeEthernet is oriented single threaded core. I refer you to the LwIP wiki or freertos example using the LwIP stack.
Maybe call stm32_eth_scheduler() inside its own thread or process is enough.


loop();
if (serialEventRun) serialEventRun();
}
Expand Down
4 changes: 3 additions & 1 deletion cores/arduino/stm32/PeripheralPins.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,5 +62,7 @@ extern const PinMap PinMap_SPI_SSEL[];
extern const PinMap PinMap_CAN_RD[];
extern const PinMap PinMap_CAN_TD[];

#endif
//*** ETHERNET ***
extern const PinMap PinMap_Ethernet[];

#endif
69 changes: 69 additions & 0 deletions cores/arduino/stm32/ethernet.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/**
******************************************************************************
* @file ethernet.h
* @author WI6LABS
* @version V1.0.0
* @date 14-June-2017
* @brief Header for ethernet background task for LwIP stack.
******************************************************************************
* @attention
*
* <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of STMicroelectronics nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
******************************************************************************
*/

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __ETHERNET_H
#define __ETHERNET_H

/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif

/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* Exported macro ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */

/* This function is defined by the NativeEthernet library and it is used as
background task inside the main loop. */
__weak void stm32_eth_scheduler(void)
{
/* NOTE : This function should not be modified. It is defined in the Ethernet
library.
*/
}

void stm32_eth_scheduler(void);

#ifdef __cplusplus
}
#endif

#endif /* __ETHERNET_H */

/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
8 changes: 8 additions & 0 deletions cores/arduino/stm32/pinmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -82,3 +82,11 @@ void* pinmap_merge_peripheral(void* a, void* b) {
// error("pinmap mis-match");
return NP;
}

PinName pin_pinName(const PinMap* map) {
if(map->pin != NC) {
return map->pin;
} else {
return NC;
}
}
2 changes: 2 additions & 0 deletions cores/arduino/stm32/pinmap.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ typedef struct {
bool pin_in_pinmap(PinName pin, const PinMap* map);
void pin_function(PinName pin, int function);


PinName pin_pinName(const PinMap* map);
void* pinmap_peripheral(PinName pin, const PinMap* map);
uint32_t pinmap_function(PinName pin, const PinMap* map);
void* pinmap_find_peripheral(PinName pin, const PinMap* map);
Expand Down
Loading