Forum Rule: Always post complete source code & details to reproduce any issue!
Page 2 of 2 FirstFirst 1 2
Results 26 to 27 of 27

Thread: Question: Any changes for HW Serial LC in TD 1.54?

  1. #26
    Senior Member+ KurtE's Avatar
    Join Date
    Jan 2014
    Posts
    9,402
    Quote Originally Posted by larry_berlin View Post
    I don't expect PJRC to invest time in research here, but another forum participant may want to question it.
    I am another forum participant who has done some work on these areas.

    But again hard to know what to go on here. So can really only throw a few darts and hope one may hit the target.

    Things like:
    a) Are you running out of RAM and your Heap and stack collide. So in some places like this I do some quick and dirty tests like check where the heap has been allocated to:
    Example in SDFat: return reinterpret_cast<char*>(sbrk(0));
    Plus maybe in function I suspect I grab address of a stack variable in function and print out both and see how close are we... Other times I may fill in all of the area that can be used for stack with known values and then someplace have code that walks the stack back from where the heap is down to first place that does not have our known value, to get idea of how far the stack has expanded...

    b) What happens if you don't use the string objects, but instead use a character array? Personally I always avoid the string objects

    c) On one processor maybe a few years ago, I had issue where SerialX.avaialable() did not appear to work... So I changed the code to something like:

    Code:
    void loop() {
      // put your main code here, to run repeatedly:
      intincommingbyte;
      
      delay(1000);
      Serial1.clear();                               // UART-Eingangspuffer sicher leeren
      Serial1.print(F("start\r"));                   // start
      Serial1.flush();
    
      digitalWrite(LED_BUILTIN, HIGH);                // show we expect input
      delay(6000);                                    // time to type on terminal max. 20 char
      digitalWrite(LED_BUILTIN, LOW);                 // input window ends
    
      inputbuffer = "";                              // Eingabestring auf init
        while ((incommingbyte  = Serial1.read()) != -1) {      // UART-Eingangspuffer auslesen bis <CR>
          if (incommingbyte != '\r')  {
            inputbuffer += incommingbyte;     // Puffer aufbauen
            if (inputbuffer.length() > 20) { break; }  // Endlosschleife und Überlauf abfangen
          }
          else { break; }                              // aufhören wenn wenn <CR> erreicht ist
        }
    
      if (inputbuffer.length() > 0) {
        Serial.println(inputbuffer);              // give recieved string to serial monitor
      }
    
      delay(6000);                             // wait for next try
    }
    I don't remember ch circumstances I ran into back then and on what... But just in case you might try something like this.

  2. #27
    Senior Member
    Join Date
    May 2017
    Posts
    121
    @KurtE
    Thanks for the answer and the suggestions. I'll try some of them out.
    That can take a few days, I will report on the results here.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •