Skip to content

Problem in FS after updating the core #148

@lucasromeiro

Description

@lucasromeiro

Hello, I'm using PlatformIO in its latest version.
I have now updated to use the Arduino 2.5.1 core to use ESP8266 12-F and now my code does not compile anymore!
Accuses error in FS.
I do not understand why. It worked before updating.
I can not find the problem.
Can someone help me?

Captura de Tela 2019-05-15 às 09 19 37

Captura de Tela 2019-05-15 às 09 20 33

Thank you

Activity

lucasromeiro

lucasromeiro commented on May 15, 2019

@lucasromeiro
Author

core 2.4.2 work fine:
platform = espressif8266@1.8.0

core 2.5.1 don't work:
platform = espressif8266

why??

ivankravets

ivankravets commented on May 15, 2019

@ivankravets
Member

Unification of SPIFFS and SD, into single compatible FS, File, and Dir objects

See esp8266/Arduino#5525

@earlephilhower do you have any migrating guide?

earlephilhower

earlephilhower commented on May 15, 2019

@earlephilhower
Contributor

There is no migration. They are compatible AFAIK and per many other users and the original SD.h examples, even.

ivankravets

ivankravets commented on May 15, 2019

@ivankravets
Member

@lucasromeiro could you share a simple project to reproduce this issue?

lucasromeiro

lucasromeiro commented on May 15, 2019

@lucasromeiro
Author

@lucasromeiro could you share a simple project to reproduce this issue?

Sure!

#include "Arduino.h"
#include <ESP8266WiFi.h>
#include <FS.h> //Biblioteca responsável por criar o Sistema de manipulação de arquivos

void setup() {
SPIFFS.begin(); //Inicializa sistema de arquivos
}

void loop() {

File carregaArquivos = SPIFFS.open("/log.txt", "a");
char charState = '1';
carregaArquivos.write(charState);
carregaArquivos.close();
}

Captura de Tela 2019-05-15 às 15 26 03

earlephilhower

earlephilhower commented on May 15, 2019

@earlephilhower
Contributor

fs::write takes a pointer and length, or a c-string, or a String, not a char.

lucasromeiro

lucasromeiro commented on May 15, 2019

@lucasromeiro
Author

fs::write takes a pointer and length, or a c-string, or a String, not a char.

If I use String it also does not work!
String charState = "1";

lucasromeiro

lucasromeiro commented on May 15, 2019

@lucasromeiro
Author

I do not understand why this worked in the previous version and now it does not work.

earlephilhower

earlephilhower commented on May 15, 2019

@earlephilhower
Contributor

Actually, I think I see the issue.

FS::File never had a File::write(char) method, but it did have a File::write(uint8_t) method. Print(the superclass of File) never supported Print::write(char).

So in the old versions you were getting silent conversions of char->uint8_t (I think you'll get a warning if you go strict enough).

Now, since your call doesn't match any exactly, it is using the template which is for writing Stream children, only.

earlephilhower

earlephilhower commented on May 15, 2019

@earlephilhower
Contributor

Try the change in esp8266/Arduino#6101 . I'm not sure if it will break anything else, but it re-enabled the usage.

lucasromeiro

lucasromeiro commented on May 15, 2019

@lucasromeiro
Author

Actually, I think I see the issue.

FS::File never had a File::write(char) method, but it did have a File::write(uint8_t) method. Print(the superclass of File) never supported Print::write(char).

So in the old versions you were getting silent conversions of char->uint8_t (I think you'll get a warning if you go strict enough).

Now, since your call doesn't match any exactly, it is using the template which is for writing Stream children, only.

Got it, so if I switch char to uint8_t it should work the same, right?
I'll try.

lucasromeiro

lucasromeiro commented on May 16, 2019

@lucasromeiro
Author

Actually, I think I see the issue.

FS::File never had a File::write(char) method, but it did have a File::write(uint8_t) method. Print(the superclass of File) never supported Print::write(char).

So in the old versions you were getting silent conversions of char->uint8_t (I think you'll get a warning if you go strict enough).

Now, since your call doesn't match any exactly, it is using the template which is for writing Stream children, only.

Its work!

uint8_t charState = '1';

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @earlephilhower@ivankravets@lucasromeiro

        Issue actions

          Problem in FS after updating the core · Issue #148 · platformio/platform-espressif8266