ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
2 мая
1266334 Топик полностью
Nikolay801_ (08.12.2022 10:00, просмотров: 88) ответил Zoro на Ну я писАл... и да - для "своего" printf....
за несколько десятилетий я так и не придумал куда можно приспособить эту фичу, переменное число аргументов, кроме вариаций на тему свой принтф. Даже в этом случае что у ТС было бы полезней сделать не так как иранец сделал, а использовать переменное число аргументов для формирования AT запроса в стиле принтф, а строки возможных заголовков ответов передавать указателем на массив. Правда тогда придется аргументы в функции сделать в обратном порядке, сначала ответ, потом 

запрос.

примерно так

да и то в принципе надумано, можно тоже

int8_t atc_comm(atc_t *atc, char *answer, uint16_t answer_size, uint32_t timeout_ms, const char *response[], const char *command ...){
  return 0;
}

atc_t atc;

void foo(void){
  char answer[42];
  static const char * stdResp[] = {"OK", "ERROR", NULL};

  if(atc_comm(&atc, answer, 42, 500, stdResp, "ATI\n") != 1)
    return;

  if(atc_comm(&atc, answer, 42, 500, stdResp, "AT+CLIP=%d\n", 1) != 1)
    return;
  
  static const char * connectResp[] = {"OK", "ERROR", "CONNECT", NULL};
  if(atc_comm(&atc, answer, 42, 500, connectResp, "AT+OPEN=\"TCP\",\"%s\",\"%i\"\n", "ya.ru", 80) != 3)
    return;
}
Будь ты проклят, Перри-Утконос!