mbed he
/
NUCLEO-F401-printf
Test
main.cpp@0:bc6e22bac566, 2019-10-22 (annotated)
- Committer:
- mbedhe
- Date:
- Tue Oct 22 09:20:58 2019 +0000
- Revision:
- 0:bc6e22bac566
TEst
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mbedhe | 0:bc6e22bac566 | 1 | #include "mbed.h" |
mbedhe | 0:bc6e22bac566 | 2 | |
mbedhe | 0:bc6e22bac566 | 3 | /* ----------------------- Modbus includes ----------------------------------*/ |
mbedhe | 0:bc6e22bac566 | 4 | #include "mb.h" |
mbedhe | 0:bc6e22bac566 | 5 | #include "mbport.h" |
mbedhe | 0:bc6e22bac566 | 6 | |
mbedhe | 0:bc6e22bac566 | 7 | /* ----------------------- Defines ------------------------------------------*/ |
mbedhe | 0:bc6e22bac566 | 8 | #define REG_INPUT_START 1000 |
mbedhe | 0:bc6e22bac566 | 9 | #define REG_INPUT_NREGS 4 |
mbedhe | 0:bc6e22bac566 | 10 | #define SLAVE_ID 0x0A |
mbedhe | 0:bc6e22bac566 | 11 | |
mbedhe | 0:bc6e22bac566 | 12 | //------------------------------------ |
mbedhe | 0:bc6e22bac566 | 13 | // Hyperterminal configuration |
mbedhe | 0:bc6e22bac566 | 14 | // 9600 bauds, 8-bit data, no parity |
mbedhe | 0:bc6e22bac566 | 15 | //------------------------------------ |
mbedhe | 0:bc6e22bac566 | 16 | |
mbedhe | 0:bc6e22bac566 | 17 | Serial pc_port(SERIAL_TX, SERIAL_RX); |
mbedhe | 0:bc6e22bac566 | 18 | |
mbedhe | 0:bc6e22bac566 | 19 | DigitalOut myled(LED1); |
mbedhe | 0:bc6e22bac566 | 20 | /* |
mbedhe | 0:bc6e22bac566 | 21 | int main() |
mbedhe | 0:bc6e22bac566 | 22 | { |
mbedhe | 0:bc6e22bac566 | 23 | int i = 1; |
mbedhe | 0:bc6e22bac566 | 24 | pc_port.printf("Hello World !\n"); |
mbedhe | 0:bc6e22bac566 | 25 | while(1) { |
mbedhe | 0:bc6e22bac566 | 26 | wait(1); |
mbedhe | 0:bc6e22bac566 | 27 | pc_port.printf("This program runs since %d seconds.\n", i++); |
mbedhe | 0:bc6e22bac566 | 28 | myled = !myled; |
mbedhe | 0:bc6e22bac566 | 29 | } |
mbedhe | 0:bc6e22bac566 | 30 | } |
mbedhe | 0:bc6e22bac566 | 31 | */ |
mbedhe | 0:bc6e22bac566 | 32 | |
mbedhe | 0:bc6e22bac566 | 33 | /* ----------------------- Static variables ---------------------------------*/ |
mbedhe | 0:bc6e22bac566 | 34 | static USHORT usRegInputStart = REG_INPUT_START; |
mbedhe | 0:bc6e22bac566 | 35 | static USHORT usRegInputBuf[REG_INPUT_NREGS]; |
mbedhe | 0:bc6e22bac566 | 36 | |
mbedhe | 0:bc6e22bac566 | 37 | /* ----------------------- Start implementation -----------------------------*/ |
mbedhe | 0:bc6e22bac566 | 38 | int |
mbedhe | 0:bc6e22bac566 | 39 | main( void ) |
mbedhe | 0:bc6e22bac566 | 40 | { |
mbedhe | 0:bc6e22bac566 | 41 | eMBErrorCode eStatus; |
mbedhe | 0:bc6e22bac566 | 42 | |
mbedhe | 0:bc6e22bac566 | 43 | eStatus = eMBInit( MB_RTU, SLAVE_ID, 0, 9600, MB_PAR_NONE ); |
mbedhe | 0:bc6e22bac566 | 44 | |
mbedhe | 0:bc6e22bac566 | 45 | /* Enable the Modbus Protocol Stack. */ |
mbedhe | 0:bc6e22bac566 | 46 | eStatus = eMBEnable( ); |
mbedhe | 0:bc6e22bac566 | 47 | |
mbedhe | 0:bc6e22bac566 | 48 | // Initialise some registers |
mbedhe | 0:bc6e22bac566 | 49 | usRegInputBuf[1] = 0x1234; |
mbedhe | 0:bc6e22bac566 | 50 | usRegInputBuf[2] = 0x5678; |
mbedhe | 0:bc6e22bac566 | 51 | usRegInputBuf[3] = 0x9abc; |
mbedhe | 0:bc6e22bac566 | 52 | |
mbedhe | 0:bc6e22bac566 | 53 | for( ;; ) |
mbedhe | 0:bc6e22bac566 | 54 | { |
mbedhe | 0:bc6e22bac566 | 55 | ( void )eMBPoll( ); |
mbedhe | 0:bc6e22bac566 | 56 | |
mbedhe | 0:bc6e22bac566 | 57 | /* Here we simply count the number of poll cycles. */ |
mbedhe | 0:bc6e22bac566 | 58 | usRegInputBuf[0]++; |
mbedhe | 0:bc6e22bac566 | 59 | } |
mbedhe | 0:bc6e22bac566 | 60 | } |
mbedhe | 0:bc6e22bac566 | 61 | |
mbedhe | 0:bc6e22bac566 | 62 | eMBErrorCode |
mbedhe | 0:bc6e22bac566 | 63 | eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs ) |
mbedhe | 0:bc6e22bac566 | 64 | { |
mbedhe | 0:bc6e22bac566 | 65 | eMBErrorCode eStatus = MB_ENOERR; |
mbedhe | 0:bc6e22bac566 | 66 | int iRegIndex; |
mbedhe | 0:bc6e22bac566 | 67 | |
mbedhe | 0:bc6e22bac566 | 68 | if( ( usAddress >= REG_INPUT_START ) |
mbedhe | 0:bc6e22bac566 | 69 | && ( usAddress + usNRegs <= REG_INPUT_START + REG_INPUT_NREGS ) ) |
mbedhe | 0:bc6e22bac566 | 70 | { |
mbedhe | 0:bc6e22bac566 | 71 | iRegIndex = ( int )( usAddress - usRegInputStart ); |
mbedhe | 0:bc6e22bac566 | 72 | while( usNRegs > 0 ) |
mbedhe | 0:bc6e22bac566 | 73 | { |
mbedhe | 0:bc6e22bac566 | 74 | *pucRegBuffer++ = |
mbedhe | 0:bc6e22bac566 | 75 | ( unsigned char )( usRegInputBuf[iRegIndex] >> 8 ); |
mbedhe | 0:bc6e22bac566 | 76 | *pucRegBuffer++ = |
mbedhe | 0:bc6e22bac566 | 77 | ( unsigned char )( usRegInputBuf[iRegIndex] & 0xFF ); |
mbedhe | 0:bc6e22bac566 | 78 | iRegIndex++; |
mbedhe | 0:bc6e22bac566 | 79 | usNRegs--; |
mbedhe | 0:bc6e22bac566 | 80 | } |
mbedhe | 0:bc6e22bac566 | 81 | } |
mbedhe | 0:bc6e22bac566 | 82 | else |
mbedhe | 0:bc6e22bac566 | 83 | { |
mbedhe | 0:bc6e22bac566 | 84 | eStatus = MB_ENOREG; |
mbedhe | 0:bc6e22bac566 | 85 | } |
mbedhe | 0:bc6e22bac566 | 86 | |
mbedhe | 0:bc6e22bac566 | 87 | return eStatus; |
mbedhe | 0:bc6e22bac566 | 88 | } |
mbedhe | 0:bc6e22bac566 | 89 | |
mbedhe | 0:bc6e22bac566 | 90 | eMBErrorCode |
mbedhe | 0:bc6e22bac566 | 91 | eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegisterMode eMode ) |
mbedhe | 0:bc6e22bac566 | 92 | { |
mbedhe | 0:bc6e22bac566 | 93 | eMBErrorCode eStatus = MB_ENOERR; |
mbedhe | 0:bc6e22bac566 | 94 | int iRegIndex; |
mbedhe | 0:bc6e22bac566 | 95 | |
mbedhe | 0:bc6e22bac566 | 96 | if (eMode == MB_REG_READ) |
mbedhe | 0:bc6e22bac566 | 97 | { |
mbedhe | 0:bc6e22bac566 | 98 | if( ( usAddress >= REG_INPUT_START ) |
mbedhe | 0:bc6e22bac566 | 99 | && ( usAddress + usNRegs <= REG_INPUT_START + REG_INPUT_NREGS ) ) |
mbedhe | 0:bc6e22bac566 | 100 | { |
mbedhe | 0:bc6e22bac566 | 101 | iRegIndex = ( int )( usAddress - usRegInputStart ); |
mbedhe | 0:bc6e22bac566 | 102 | while( usNRegs > 0 ) |
mbedhe | 0:bc6e22bac566 | 103 | { |
mbedhe | 0:bc6e22bac566 | 104 | *pucRegBuffer++ = |
mbedhe | 0:bc6e22bac566 | 105 | ( unsigned char )( usRegInputBuf[iRegIndex] >> 8 ); |
mbedhe | 0:bc6e22bac566 | 106 | *pucRegBuffer++ = |
mbedhe | 0:bc6e22bac566 | 107 | ( unsigned char )( usRegInputBuf[iRegIndex] & 0xFF ); |
mbedhe | 0:bc6e22bac566 | 108 | iRegIndex++; |
mbedhe | 0:bc6e22bac566 | 109 | usNRegs--; |
mbedhe | 0:bc6e22bac566 | 110 | } |
mbedhe | 0:bc6e22bac566 | 111 | } |
mbedhe | 0:bc6e22bac566 | 112 | } |
mbedhe | 0:bc6e22bac566 | 113 | |
mbedhe | 0:bc6e22bac566 | 114 | if (eMode == MB_REG_WRITE) |
mbedhe | 0:bc6e22bac566 | 115 | { |
mbedhe | 0:bc6e22bac566 | 116 | if( ( usAddress >= REG_INPUT_START ) |
mbedhe | 0:bc6e22bac566 | 117 | && ( usAddress + usNRegs <= REG_INPUT_START + REG_INPUT_NREGS ) ) |
mbedhe | 0:bc6e22bac566 | 118 | { |
mbedhe | 0:bc6e22bac566 | 119 | iRegIndex = ( int )( usAddress - usRegInputStart ); |
mbedhe | 0:bc6e22bac566 | 120 | while( usNRegs > 0 ) |
mbedhe | 0:bc6e22bac566 | 121 | { |
mbedhe | 0:bc6e22bac566 | 122 | usRegInputBuf[iRegIndex] = ((unsigned int) *pucRegBuffer << 8) | ((unsigned int) *(pucRegBuffer+1)); |
mbedhe | 0:bc6e22bac566 | 123 | pucRegBuffer+=2; |
mbedhe | 0:bc6e22bac566 | 124 | iRegIndex++; |
mbedhe | 0:bc6e22bac566 | 125 | usNRegs--; |
mbedhe | 0:bc6e22bac566 | 126 | } |
mbedhe | 0:bc6e22bac566 | 127 | } |
mbedhe | 0:bc6e22bac566 | 128 | } |
mbedhe | 0:bc6e22bac566 | 129 | |
mbedhe | 0:bc6e22bac566 | 130 | return eStatus; |
mbedhe | 0:bc6e22bac566 | 131 | } |
mbedhe | 0:bc6e22bac566 | 132 | |
mbedhe | 0:bc6e22bac566 | 133 | |
mbedhe | 0:bc6e22bac566 | 134 | eMBErrorCode |
mbedhe | 0:bc6e22bac566 | 135 | eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNCoils, |
mbedhe | 0:bc6e22bac566 | 136 | eMBRegisterMode eMode ) |
mbedhe | 0:bc6e22bac566 | 137 | { |
mbedhe | 0:bc6e22bac566 | 138 | return MB_ENOREG; |
mbedhe | 0:bc6e22bac566 | 139 | } |
mbedhe | 0:bc6e22bac566 | 140 | |
mbedhe | 0:bc6e22bac566 | 141 | eMBErrorCode |
mbedhe | 0:bc6e22bac566 | 142 | eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNDiscrete ) |
mbedhe | 0:bc6e22bac566 | 143 | { |
mbedhe | 0:bc6e22bac566 | 144 | return MB_ENOREG; |
mbedhe | 0:bc6e22bac566 | 145 | } |
mbedhe | 0:bc6e22bac566 | 146 |