Waarom wordt de bootloader gemold

Software die niet past in bovenstaande onderwerpen
Berichten: 4
Geregistreerd: 11 Mei 2017, 08:34

Waarom wordt de bootloader gemold

Berichtdoor Rijpaard » 11 Mei 2017, 08:47

Arduino Leonardo.
Library/ LibT.h:
Code: Alles selecteren
#ifndef LibT_h
#define LibT_h

#include "Arduino.h"

class LibT
{
  public:
    LibT(int Pin_Stb, int Pin_Clk, int Pin_Dio);
};
   

#endif

Library/ LibT.cpp:
Code: Alles selecteren
#include "Arduino.h"
#include "LibT.h"

int _pin_Dio, _pin_Clk, _pin_Stb;

LibT::LibT(int Pin_Dio, int Pin_Clk, int Pin_Stb) {
   _pin_Stb = Pin_Stb;
   _pin_Clk = Pin_Clk;
    _pin_Dio = Pin_Dio;
   pinMode(_pin_Stb, OUTPUT);
    pinMode(_pin_Clk, OUTPUT);
    pinMode(_pin_Dio, OUTPUT);
   delay(10); // Deze delay molt de bootloader
    }

Sketch:
Code: Alles selecteren
#include "LibT.h"

LibT l(10, 11, 12);

void setup() {
  // put your setup code here, to run once:
}

void loop() {
  // put your main code here, to run repeatedly:
  delay(100);
}


Als ik deze sketch upload is de bootloader dood.
Als ik de delay(10) verwijder uit de constructor gaat alles goed.
Kan iemand mij vertellen waarom.

Advertisement

Gebruikers-avatar
Berichten: 1890
Geregistreerd: 06 Aug 2016, 01:03

Re: Waarom wordt de bootloader gemold

Berichtdoor Koepel » 11 Mei 2017, 13:50

Dat leek me een mooie uitdaging.
Arduino 1.8.2 in linux, met Arduino Leonardo met bootloader van Arduino.cc IDE 1.6.8.
En inderdaad, de seriële poort valt uit. Dus uploaden lukt dan niet meer.

De bootloader zit er nog in, en uploaden is toch nog mogelijk.
Je kunt bij Bestand/Voorkeuren de uitgebreide uitvoer voor het uploaden aanzetten.
Klik daarna op de knop "Upload" en wacht totdat je "PORTS {} / {} => {}" ziet. Druk dan op de reset knop van het Leonardo board.

Een delay van 1 of 1000 ms maakt niet uit. Het is dus constructor waarvan de aanroep van delay() vóór setup() wordt uitgevoerd. Ook de parameter is nodig (al is het maar één byte).

Je weet dat je in de *.cpp en *.h de parameters verwisseld hebt ?

Ik heb geen idee. Het zou een bug kunnen zijn. De delay() roept de yield() aan. Maar ik weet niet of dat te maken heeft met de usb-serial code.

De code heb ik kunnen krimpen tot dit:
Code: Alles selecteren
class myLibT
{
  public:
    myLibT( char a);
};

myLibT::myLibT( char a)
{
  delay(10);     // This delay together with the parameter kills the usb-serial.
}

myLibT serialwrecker( 0);   // the parameter is needed to kill the usb-serial

void setup()
{
}

void loop()
{
}

Berichten: 4
Geregistreerd: 11 Mei 2017, 08:34

Re: Waarom wordt de bootloader gemold

Berichtdoor Rijpaard » 11 Mei 2017, 16:47

Opgelost

@Koepel

Bedankt voor het uitzoeken.
1. Fijn dat er een simpele oplossing is om het uploaden weer mogelijk te maken.
2. Ik heb geprobeerd Setup met "pinMode(13, OUTPUT); digitalWrite(13, HIGH); vóór myLibT te plaatsen: Hetzelfde resultaat. Mogelijk toch een bug ?
3. Parameterverwisseling is ontstaan door het probleem te minimaliseren.

Toch bedankt. Hiermee kan ik verder.

Gebruikers-avatar
Berichten: 1890
Geregistreerd: 06 Aug 2016, 01:03

Re: Waarom wordt de bootloader gemold

Berichtdoor Koepel » 11 Mei 2017, 19:04

Issue gemaakt: https://github.com/arduino/Arduino/issues/6277
Ik heb het een "possible bug" genoemd, omdat ik niet begrijp wat er aan de hand is.

Gebruikers-avatar
Berichten: 1890
Geregistreerd: 06 Aug 2016, 01:03

Re: Waarom wordt de bootloader gemold

Berichtdoor Koepel » 19 Mei 2017, 19:30

@Rijpaard, ze hebben het opgelost. Dat is nu nog een Pre-Release, dus bij de volgende versie is het opgelost.

Terug naar Overige Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast