Чибиос и сим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);
    ...
}
Другие вопросы по тегам