"我正在使用Mikroe的示例代码进行GSM单击,并使用几行代码来发送示例文本消息。但是我对'sendsmsmsg'有问题MSG是未申报标识符的功能。我试图在代码的顶部定义它,但仍然无法使用。
"这使用Mikroelektronika开发的GSM点击库"
/*
Example for GSM Click
Date : Jan 2018.
Author : MikroE Team
Test configuration PIC32 :
MCU : P32MX795F512L
Dev. Board : EasyPIC Fusion v7
PIC32 Compiler ver : v4.0.0.0
---
Description :
The application is composed of three sections :
- System Initialization - Initializes all necessary GPIO pins, UART used for
the communcation with GSM module and UART used for infromation logging
- Application Initialization - Initializes driver, power on module and sends few
command for the default module configuration
- Application Task - running in parallel core state machine and checks for call flag.
If call detected parser will hang up call.
Additional Functions :
All additional functions such as timer initialization and default handler.
Notes :
- Echo must be turned off for succefull parsing. ( ATE0 )
- UART polling works much better with HFC enabled.
- In case of usage of other MCUs Timer initialization must be adjusted according to your MCU.
*/
#define __GSM__
#include "Click_GSM_types.h"
#include "Click_GSM_config.h"
#include "Click_GSM_timer.h"
#include <stdbool.h>
static uint8_t callFlag;
char uart2Buf;
bool rc;
void gsm_default_handler( uint8_t *rsp, uint8_t *evArgs )
{
mikrobus_logWrite( rsp, _LOG_TEXT );
// SKIP <CR> and <LF>
if (0 == strncmp("RING", rsp + 2, 4))
{
callFlag = 1;
}
}
void systemInit() //initialize the mikrobus pins as GPIO and UART pins
{
callFlag = 0;
mikrobus_gpioInit( _MIKROBUS1, _MIKROBUS_AN_PIN, _GPIO_INPUT ); //enable AN pin as input
mikrobus_gpioInit( _MIKROBUS1, _MIKROBUS_PWM_PIN, _GPIO_INPUT ); //enable PWM pin as input
mikrobus_gpioInit( _MIKROBUS1, _MIKROBUS_INT_PIN, _GPIO_INPUT ); //enable INT pin as input
mikrobus_gpioInit( _MIKROBUS1, _MIKROBUS_RST_PIN, _GPIO_OUTPUT ); //enable RST pin as output
mikrobus_gpioInit( _MIKROBUS1, _MIKROBUS_CS_PIN, _GPIO_OUTPUT ); //enable CS pin as output
mikrobus_uartInit( _MIKROBUS1, &_GSM_UART_CFG[0] ); //enable UART communication
mikrobus_logInit( _LOG_USBUART_B, 9600 ); //initialize the log with baud rate
}
void WriteString(char *strBuf) //Write String
{
while(strBuf)
{
UART2_Write(*strBuf++);
}
UART2_Write(0x0D);
}
void sendSMSmsg(char *msg)
{
gsm_cmdSingle("AT+CMGS="+639054186435""); //dial it up
WriteString(msg); //send the message
UART2_Write(0x1A); //Ctrl-Z
UART2_Write(0x0D); //CR
rc = false; //wait for OK
do
{
if (UART2_Data_Ready()==1)
{
UART2_Read_Text(uart2Buf,"OK", 255);
rc = true;
}
}while (rc==false);
}
void applicationInit()
{ char msg[];
// TIMER INIT
gsm_configTimer();
// DRIVER INIT
gsm_uartDriverInit((T_GSM_P)&_MIKROBUS1_GPIO, (T_GSM_P)&_MIKROBUS1_UART);
gsm_coreInit( gsm_default_handler, 1500 );
// MODULE POWER ON
gsm_hfcEnable( true );
gsm_modulePower( true );
// MODULE INIT
gsm_cmdSingle( "AT" ); //knock on the door
gsm_cmdSingle( "AT" );
gsm_cmdSingle( "AT" );
gsm_cmdSingle( "ATE0" ); //turn off echo
gsm_cmdSingle( "AT+CMGF=1" ); //text messaging
//SMS Message
msg[0] = ' ';
strcat(msg, "Test message 1");
strcat(msg, "rn"); //add new line (CR+LF)
}
void applicationTask()
{
// CORE STATE MACHINE
gsm_process();
if (0 != callFlag)
{
gsm_cmdSingle( "ATH" );
Delay_ms( 3000 );
sendSMSmsg(msg);
callFlag = 0;
}
}
void main()
{
systemInit();
applicationInit();
while (1)
{
applicationTask();
}
}
/* ----------------------
"表达式中未宣布的标识符'msg'
您有此代码:
char msg[];
...
//SMS Message
msg[0] = ' ';
strcat(msg, "Test message 1");
strcat(msg, "rn"); //add new line (CR+LF)
第一行定义了指针:
char msg[];
随后的行在内存中随机写入并损坏它:
msg[0] = ' ';
strcat(msg, "Test message 1");
strcat(msg, "rn"); //add new line (CR+LF)
编写未分配记忆的结果是不确定的=任何可能发生,需要或不希望的,预期或意外的。
修复此操作后,您可以继续调试。