Skocz do zawartości

strtok_r() jak dołączyć bibliotekę


Pomocna odpowiedź

Napisano

Piszę funkcję parsującą dane z UDP na esp8266. Więc problem jest taki że o ile fukcja strtok() działa to już strtok_r() nie.

 case zapis:
                {
        
        char * p = strtok(str, "#");
        char * pptr[10];
        char * reszta[10];
       
        uint8_t l = 0;
        while (p)
        {
                   pptr[l] = p;
        p = strtok(0, "#");
        l++;
        }
        daneEeprom.saved = l; // ile zapisanych

        for(uint8_t i = 0; i < l; i++){
            daneEeprom.numery[i].param = atoi(strtok_r(pptr[i],">",&reszta[i]));
        //    Serial.println(reszta[i]);
            
            memcpy(daneEeprom.numery[i].nTel,reszta[i],13);
        
        }
                }
        break;

Kod parsujący mam z grubsza przetestowany na https://www.jdoodle.com/c-online-compiler/ 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

 char str[] = "1>123456789#3>333555999#2>111000111#";



int main() {
   
 //   char tok[] = "#"
   char * p = strtok(str,"#");
   char * p2[5];
   char * reszta[5];

int l = 0;
int opt[5];
while(p){
        //    printf(" %s\n", p);
         p2[l] = p;
        p = strtok(0, "#");
        l++;
}        
for(int i= 0; i<l;i++){
    opt[i] = atoi(strtok_r(p2[i],">",&reszta[i]));
}
//printf(reszta[0]);
for(int i= 0; i<l;i++){
 //  printf("\n%d",reszta[i]);
printf("\n\r",reszta[i]);
    
}
printf("\n %d",l);
}  

więc nie sądzę żeby problemem był błąd w programie. Znalazłem też że ktoś już miał podobny kłopot https://www.esp8266.com/viewtopic.php?f=28&t=2257 Niestety u mnie dołączenie extern C daje kolejne błędy 😕 

Compiling .pio\build\esp12e\libae9\udp\udpParse.cpp.o
lib\udp\udpParse.cpp:10:10: fatal error: esp_libc.h: No such file or directory

******************************************************************
* Looking for esp_libc.h dependency? Check our library registry!
*
* CLI  > platformio lib search "header:esp_libc.h"
* Web  > https://platformio.org/lib/search?query=header:esp_libc.h
*
******************************************************************

   10 | #include "esp_libc.h"
      |          ^~~~~~~~~~~~
compilation terminated.
*** [.pio\build\esp12e\libae9\udp\udpParse.cpp.o] Error 1

a tutaj reszta dołączonych bibliotek 

#include <Arduino.h>
#include <WiFiUdp.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

#include "udpParse.h"
#include "../mem/memo.h"

extern "C" {
#include "esp_libc.h"
}

 

(edytowany)

 IMG_20210625_130448.thumb.jpg.6c5d9c62abf85224a6d80f5713084007.jpg

Ewentualnie w ktorym katalogu szukać tej deklaracji?

Edytowano przez _LM_

Teraz na telefonie to nie sprawdzę, ale libc powinien się sam magicznie włączyć bez żadnych dodatkowych manipulacji. Używasz wyłącznie standardowych nagłówków. 

  • Lubię! 1

Działa? Działa. I tak zostawić.

Nota bene ja stosuję zawsze własną funkcję typu getToken, ze sprawdzaniem np. czy wprowadzona wartość mieści się w jakimś tam zakresie. Raz napisałem i wystarczy... a świetnie się sprawdza przy wpisywaniu poleceń z seriala.

  • Lubię! 1
3 minuty temu, ethanak napisał:

Działa? Działa. I tak zostawić.

No nie do końca, bo zauważyłem że program nie wchodzi w for.. ale to może być problem ze stringiem przylatującym z UDP lub jakaś inna głupota popełniona po drodze. 

 

6 minut temu, ethanak napisał:

Nota bene ja stosuję zawsze własną funkcję typu getToken, ze sprawdzaniem np. czy wprowadzona wartość mieści się w jakimś tam zakresie. Raz napisałem i wystarczy... a świetnie się sprawdza przy wpisywaniu poleceń z seriala.

płacę w lajkach xD

Poczekaj, będę publikować w diy moją gadającą poziomicę (muszę tylko film nagrać i jakiś sensowny opis zrobić) - wydłubiesz sobie stamtąd. Może bezpośrednio copy/paste nie do końca zadziała, ale ideę możesz przyswoić.

(edytowany)

Ok. Ponieważ równolegle piszę aplikację na androida okazało się że tam też popełniłem błąd, po naprawie zaczęła się wysypywać aplikacja na esp . Ale to nic, możliwe że po usunięciu kocopołów w programie strtok_r (w sensie że kod wskoczy w miejsce jej wywołania)również zacznie działać. Chwilowo nie mam nic mądrego do napisania. Później zdam relację. Także sorki za sianie zamętu 😉 na usprawiedliwienie mam to że jestem po nocce a niezłą dzisiaj dyskotekę mieliśmy.

Edytowano przez _LM_

No - mnie czeka jeszcze napisanie apki na androida, na szczęście wystarczy mi (chyba) inventor.

Najgorsze to, że nie mogę użyć rpi pico bo moduł serial go nie rozpoznaje, muszę kombinować z arduino nano, ale to (mam nadzieję) będzie do przeskoczenia. Ale nawet jak nie wystarczy to wezmę jakąś najtańszą płytkę z esp32. Bądźmy dobrej myśli 🙂

(edytowany)
19 minut temu, ethanak napisał:

na szczęście wystarczy mi (chyba) inventor.

Jest dobry i prosty jeśli nie robisz zbyt rozbudowanych apek. Ja go sobie odpuściłem na rzecz https://www.b4x.com/ zwłaszcza że teraz jest za free. A w app inventor zbyt wiele rzeczy mnie denerwowało, kurde nawet głupiego layotu nie dało się skopiować. Co do apki którą teraz piszę w powiązaniu z esp: To ma być urządzenie nadzorujące przepływ gotówki wraz z wysyłaniem raportów po gsm w automacie vendingowym. Apka jest potrzebna do zapisywania konfiguracji typu nr telefonu na jaki ma przyjść sms itd. Łączy się z telefonem po udp i wtedy można wprowadzić zmiany. W normalnym trybie esp ma wyłączone wszytkie dostępności radiowe a za to przechwytuje dane z rsr232(portu drukarkowego maszyny) konwertuje i wysyła po gsm raporty.

 

EDIT No i trochę sentymentalny może jestem ale moje poczatki kiedyś tam były właśnie w Basicu więc może temu polubiłem b4a 🙂

Edytowano przez _LM_

Ja mam prościej - telefon ma służyć tylko jako syntezator mowy i przy okazji zasilać urządzenie.

A co do Basica... ja się wychowałem na Commodore, wcześniej bawiłem się tym na ICL-ach (Odra), do tego języka mam sentyment. Ale dziś... chyba przesada. 

Swego czasu próbowałem mShella na Symbianie, nawet udało mi się w tym czymś apkę napisać. Było to fajne ale miało wadę: nawet koledze nie mogłeś przesłać programu, bo trzeba było zarejestrować apkę dla konkretnego IMEI, a bez płacenia jakichś durnych pieniędzy mogłeś mieć tylko kilkanaście zarejestrowanych telefonów.

No, ale chyba sobie tego Basica sprawdzę, zobaczę co się z niego da wycisnąć 🙂

2 minuty temu, ethanak napisał:

Ja mam prościej - telefon ma służyć tylko jako syntezator mowy i przy okazji zasilać urządzenie.

Nie sprawdzałem tego, ale na pewno w b4a są biblioteki do syntezy (z reszta w inventorze też, kiedyś popełniłem apke która po losowaniu mówiła jakie alko pije nastepny pacjent hahaha) jaką drogą twoja aplikacja dostanie informacje co ma aktualnie gadać? 

Znajdż w moich tematach "suwmiarka", tam jest wszystko opisane włącznie z prostą apką na androida. Tylko czytaj do końca, bo serialowe połączenie jest opisane właśnie na końcu 🙂

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...