Чибиос и сим900 шилед
У меня есть эта проблема, у меня есть STM32 Nucleo L152RE и Shield SIM 900, теперь, если я напишу эту простую тему, все будут работать хорошо,
'static THD_WORKING_AREA(waRead, 128);
static THD_FUNCTION(Thread,arg) {
(void)arg;
chRegSetThreadName("th_callback");
while (TRUE){
/* This will wait for a character to be received */
uint8_t c = sdGet(&SD1); //questo prende il carattere
sdPut(&SD2, c); // questo lo spara alla terminale
}
}
"Когда я заправляю AT Comnad, я вижу хороший ответ. Теперь я создаю этот буфер
'static uint8_t bufferMsg[128];'
и я использую эту ветку для хранения ответа
' static THD_WORKING_AREA(waRead5, 128);
static THD_FUNCTION(Thread5,arg) {
chRegSetThreadName("th_Riempio_Buffer");
msg_t charbuf;
int count=0;
uint8_t c;
event_listener_t Uart1Data;
eventmask_t flags;
chEvtRegisterMask((event_source_t *)chnGetEventSource(&SD1), &Uart1Data, EVENT_MASK(1));
while (TRUE) {
chEvtWaitOneTimeout(EVENT_MASK(1), MS2ST(10));
chSysLock();
flags =chEvtGetAndClearFlags(&Uart1Data);
chSysUnlock();
if (flags & CHN_INPUT_AVAILABLE)
{
do
{
charbuf = chnGetTimeout(&SD1,TIME_IMMEDIATE);
if (charbuf != Q_TIMEOUT)
{
while((charbuf != '\n') && (count < 128)) {
sdWrite(&SD2, (uint8_t *)B3,4); // va bene
bufferMsg[count]= charbuf;
count++;
}
}
}
while (charbuf != Q_TIMEOUT);
}
}
}
'
эти темы не работают и не хранят ответ, вы можете мне помочь?
С наилучшими пожеланиями А.
1 ответ
Решение
Для меня я использую,
определять
#define buffer_size 128
char buffer[buffer_size + 1];
int nbytes = 0;
функция
void SIM_callback(){ /* GSM900 Serial */
char x = SIM.getc();
buffer[nbytes] = x;
nbytes++; if (nbytes > buffer_size) nbytes = buffer_size;
buffer[nbytes] = '\0';
}
Главный
main (){
// Clear Buffer
buffer[nbytes] = '\0';
...
while(1);
...
}