Chibios 和 SIM900 Shiled

问题描述 投票:0回答:1

我有这个问题: 我有一个 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 命令时,我看到了 ok 答案。 现在我创建这个缓冲区:

'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);
                }
      }
}
'

这些线程不起作用,也不存储答案。我该如何解决这个问题?

multithreading events gsm chibios
1个回答
0
投票

我用的,

定义

#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);
    ...
}
© www.soinside.com 2019 - 2024. All rights reserved.