Skocz do zawartości

strtok_r() jak dołączyć bibliotekę


_LM_

Pomocna odpowiedź

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"
}

 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

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
Link do komentarza
Share on other sites

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

Link do komentarza
Share on other sites

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ć.

Link do komentarza
Share on other sites

(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_
Link do komentarza
Share on other sites

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 🙂

Link do komentarza
Share on other sites

(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_
Link do komentarza
Share on other sites

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ąć 🙂

Link do komentarza
Share on other sites

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ć? 

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.