µTasker Forum
µTasker Forum => MODBUS => Topic started by: Kiger on June 01, 2017, 04:26:24 AM
-
Dear Mark @Mark
If active the define MODBUS_RS485_SUPPORT , there are many undefined references.
Do I need implement all the function by myself?
Hardware: FRDM_KEAZ128Q80
IDE: codewarrior 10.7
linker output:
Description Resource Path Location Type
mingw32-make: *** [uTaskerV1_4.elf] Error 1 uTasker-Kinetis-master C/C++ Problem
implicit declaration of function '_CONFIGURE_RTS_0_HIGH' [-Wimplicit-function-declaration] kinetis_UART.h /uTasker-Kinetis-master/Hardware/Kinetis line 1403 C/C++ Problem
implicit declaration of function 'fnConfigRTS_delay' [-Wimplicit-function-declaration] MODBUS.c /uTasker-Kinetis-master/uTasker/MODBUS line 910 C/C++ Problem
undefined reference to `_SET_RTS_0_HIGH' kinetis_UART.h /uTasker-Kinetis-master/Hardware/Kinetis line 1638 C/C++ Problem
undefined reference to `fnConfigRTS_delay' MODBUS.c /uTasker-Kinetis-master/uTasker/MODBUS line 910 C/C++ Problem
undefined reference to `_SET_RTS_1_HIGH' kinetis_UART.h /uTasker-Kinetis-master/Hardware/Kinetis line 1642 C/C++ Problem
undefined reference to `_SET_RTS_1_LOW' kinetis_UART.h /uTasker-Kinetis-master/Hardware/Kinetis line 1610 C/C++ Problem
'ucNexttestPort' defined but not used [-Wunused-variable] modbus_app.c /uTasker-Kinetis-master/Applications/uTaskerV1.4 line 469 C/C++ Problem
undefined reference to `_SET_RTS_2_HIGH' kinetis_UART.h /uTasker-Kinetis-master/Hardware/Kinetis line 1647 C/C++ Problem
undefined reference to `_SET_RTS_2_LOW' kinetis_UART.h /uTasker-Kinetis-master/Hardware/Kinetis line 1615 C/C++ Problem
undefined reference to `_SET_RTS_0_LOW' kinetis_UART.h /uTasker-Kinetis-master/Hardware/Kinetis line 1606 C/C++ Problem
undefined reference to `_CONFIGURE_RTS_2_HIGH' kinetis_UART.h /uTasker-Kinetis-master/Hardware/Kinetis line 1451 C/C++ Problem
undefined reference to `_CONFIGURE_RTS_2_LOW' kinetis_UART.h /uTasker-Kinetis-master/Hardware/Kinetis line 1455 C/C++ Problem
-
Hi
The KEA128 doesn't have an RTS line, which is used to control the RS485 direction, and it is therefore necessary to use a general purpose IO instead. Since there is no pre-defined output for such operation you need to add macros to suit the board in question.
You can use the FRDM_KL02Z configuration as reference, where the following set of macros is included in app_hw_kinetis.h:
// RTS control via GPIO output
//
#define RTS_0_LINE PORTB_BIT0
#define _CONFIGURE_RTS_0_HIGH() _CONFIG_DRIVE_PORT_OUTPUT_VALUE(B, (RTS_0_LINE), (RTS_0_LINE), (PORT_SRE_SLOW | PORT_DSE_HIGH))
#define _CONFIGURE_RTS_0_LOW() _CONFIG_DRIVE_PORT_OUTPUT_VALUE(B, (RTS_0_LINE), (0), (PORT_SRE_SLOW | PORT_DSE_HIGH))
#define _SET_RTS_0_HIGH() _SETBITS(B, RTS_0_LINE)
#define _SET_RTS_0_LOW() _CLEARBITS(B, RTS_0_LINE)
This can be performed for each available UART to allow each to control its own RTS output.
In case there is no need for an output on a particular UART, dummy macros can be added - for example
#define _CONFIGURE_RTS_1_HIGH()
#define _CONFIGURE_RTS_1_LOW()
#define _SET_RTS_1_HIGH()
#define _SET_RTS_1_LOW()
Regards
Mark