Hola estoy intentando hacer la implementación del modbus en c y no sé porque me dice que los métodos no reconocen las variables globales ni los prototipos de las funciones y no sé porque.
MBSlave.cpp
#include "MBSlave.h"
UCHAR mFrame[BUFFER_SIZE];
UINT mHoldingRegsSize;
UINT *mRegs;
UCHAR mBroadcastFlag;
UCHAR mSlaveID;
UCHAR mFunction;
UINT errorCount;
UINT T1_5; //inter character time out
UINT T3_5; //frame delay
Serial *MBPort;
// function definitions
void exceptionResponse(UCHAR exception);
UINT calculateCRC(UCHAR bufferSize);
void sendPacket(UCHAR bufferSize);
void
mBInit( Serial *SerialPort,
int baud,
UCHAR _slaveID,
UINT _holdingRegsSize,
UINT *_regs)
{
//implementación
}
metodos de las funciones.
MBSlave.h
#ifndef MBSlave_H
#define MBSlave_H
//definitions of types
typedef unsigned char UCHAR;
typedef unsigned int UINT;
#include "mbed.h"
#define BUFFER_SIZE 64
#define MBdebug 1
UINT mBPoll( void );
void mBInit(Serial *SerialPort,
int baud,
UCHAR _slaveID,
UINT _holdingRegsSize,
UINT *_regs)
#endif
Se me ocurre que no uses extern para cuando declares las variables locales en los fuentes que acceden a las variables externas que has definido.
Puede que el linkador le falte la información para encontrar las cabeceras y la biblioteca que has creado: -l<path_de_cabecera> -I<path_de_librería>
MAFUS muchísimas gracias por contestar acabo de ver el problema yo también pensaba que necesitaba extern pero no si te fijas bien en el .h la declaración void mBInit(....) le falta el punto y coma.
demasiadas horas delante del ordenador programando.
Amigo porque no utilizas la librería #include<stdint.h> es más portable si la usas así y es estándar y aparte te evitas tiempo reinventando la rueda.
Vaya fallo mas sutil, jaja. Buena vista ;-)
Gracias furciorita pero estoy trabajando en un microcontrolador y para mi uso no es necesario.
¿Cuál es el proyecto?
montar dos microcontroladores con comunicación modbus rs232 rtu uno de maestro y otro de esclavo.
Ah, jeje, creía que le ibas a hacer algo al coche ;)