Dikstra's 1973 proposal of the new language statement was about the time I was first using Fortran. In retrospect, the extra (accidental) genius of Dijkstra is that he conjured it just one year after the release of the Signetics write only memory. The Signetics device would have been an ideal destination for the results of programs heavily depending on the come from statement.

-Pete

On 7/1/20 10:45 AM, Rick DeNatale via TriEmbed wrote:
How many of you are old enough to remember FORTRANs computed go to, and its evil twin the computed come from. https://web.archive.org/web/20180716171336/http://www.fortran.com/fortran/come_from.html


On Jul 1, 2020 at 9:13 AM, <Scott Hall via TriEmbed <mailto:[email protected]>> wrote:

NO NO, DON'T USE GOTO !

Seriously though, this has been a behaviour of the Arduino compiler compilation for a while -- its even mentioned in some Arduino books.  The workaround is to have a single function called for each case label and to put the statements desired with the function.  This gets optimized to a jump table anyway, so its just a matter of doing this in practice.

On Wed, Jul 1, 2020 at 12:34 AM Jon Wolfe via TriEmbed <[email protected] <mailto:[email protected]>> wrote:

    Yep, GCC has a ton of extensions to C and C++, though they
    obviously need careful consideration when using, if it’s work the
    downside of making the code less portable.

    https://gcc.gnu.org/onlinedocs/gcc-5.2.0/gcc/C-Extensions.html

    One of my favorites is local functions.

    *From: *Rodney Radford <mailto:[email protected]>
    *Sent: *Tuesday, June 30, 2020 9:04 PM
    *To: *Jon Wolfe <mailto:[email protected]>
    *Cc: *Brian <mailto:[email protected]>; Triangle
    Embedded Computing Discussion <mailto:[email protected]>
    *Subject: *Re: [TriEmbed] Hacking a fake vintage radio (with
    Arduino + Pi 0)

    I had never heard of the GCC label variable, so I had to google
    it... wow, I learned something new tonight!

    
https://stackoverflow.com/questions/1777990/is-it-possible-to-store-the-address-of-a-label-in-a-variable-and-use-goto-to-jum


    On Tue, Jun 30, 2020 at 8:57 PM Jon Wolfe via TriEmbed
    <[email protected] <mailto:[email protected]>> wrote:

        There is a trick you can use with gcc that is a non-standard
        C construct where you can use ‘goto’ and give it a variable
        containing the address of a label. You then create an array
        of label address and you can then dynamically index that
        array to jump to various locations. I’ve seen it used as an
        optimization technique, and you can also have more control
        over the program flow, though it is using the infamous
        keyword, Essentially though it end up looking pretty much
        like a switch-case.

        That is really odd about that gcc bug.  It’s not like I’ve
        never seen them, but 99.9% of the time when I thought I had
        found a compiler bug in C/C++, it turns out to be something
        else. (hafl the time one of those things that disappears with
        a “clean/rebuild all”)  I remember the Arduino /AVR/gcc
        linker used to have a bug related to 8-bit AVR chips that had
        more than 64KB of flash memory, such as the ATMega 1284.
        Those chips address by 16 bit words not bytes, so 128kb of
        flash is accessible without trick likes far pointers, but the
        linker would mess up the address calculations sometimes I
        think for interrupt handlers or functions called by interrupt
        handlers that crossed the 64kb boundary.

        *From: *Huan Truong via TriEmbed <mailto:[email protected]>
        *Sent: *Tuesday, June 30, 2020 12:48 PM
        *To: *Brian <mailto:[email protected]>
        *Cc: *Triangle Embedded Computing Discussion
        <mailto:[email protected]>
        *Subject: *Re: [TriEmbed] Hacking a fake vintage radio (with
        Arduino + Pi 0)

        Oh yeah, that explains my issue. I definitely ran into that issue
        where I have checked and had no reason to believe I was doing
        something wrong, yet, when I evacuated each switch to a
        function, the
        switch worked correctly. But neither scoping with an
        anonymous scope
        nor renaming the variables work.

        The reason I used the switch was that I read on stackoverflow
        at one
        point and someone said that we should use switches instead of
        elseifs
        when we have a lot of cases. Then, using switches, the
        compiler will
        be able to (at some point) create a lookup table for you so it's
        faster. I doubt that was what happening at least on the
        Arduino case.
        You'll need a giant lookup table which the uCs don't have
        memory for.
        I suspect that in a lot of cases, using switches is probably
        just as
        slow as using elseifs. Now as I see that it is so buggy, I
        probably
        will not use switches, at least on Arduino.

        Cheers,
        - Huan.

        On Tue, Jun 30, 2020 at 9:23 AM Brian via TriEmbed
        <[email protected] <mailto:[email protected]>> wrote:
        >
        > Side note:
        >
        > The arduino compiler has bugs in how it handles switch
        statements. I've
        > run into situations lately where the order of the case
        statements matter
        > (which it never should); cases are completely ignored, etc.
        >
        > I believe it may be tied to the use of local scoping within
        a case, e.g.:
        >
        > switch(thing) {
        > case 1:
        > {
        > // stuff with case-local scope
        > }
        > break;
        > }
        >
        > Syntactically- and semantically-correct code has proven to
        generate
        > incorrect runtime results.
        >
        > I haven't had time/motivation to submit a bug report, but I
        should do
        > that. At any rate, a potential workaround is to reorder
        your cases.
        >
        > -B
        >
        > On 6/24/20 9:51 PM, Huan Truong via TriEmbed wrote:
        > > Thanks Pete!
        > >
        > > I feel like there was something really mysterious about
        the switch statement. Even if I pasted the whole blocks of
        code of each function I would have called to the {} inside a
        case, the code still wouldn’t work. That baffled me by a mile.
        > >
        > > But yeah, I spent way too much time on the project that
        I’m comfortable with the idea of not understanding some of it
        now. The watchdog timer code was baffling too.
        > >
        > > Please excuse my typos, sent from phone.
        > >
        > > On Jun 24, 2020, at 10:14 AM, Pete Soper via TriEmbed
        <[email protected] <mailto:[email protected]>> wrote:
        > >
        > > What a beautifully presented adventure. Loved reading
        it. And when you say a problem "could be bad" you make your
        point. :-) (meant as a "find Waldo" exercise for alert readers)
        > >
        > > Hadn't heard of "kev" or any other Arduino emulator for
        that matter. That aspect was interesting too.
        > >
        > > The other issue with redeclaration of the vars local to
        the switch statement is that they literally don't exist
        outside it, so communicating their values outside the block
        would be difficult. :-) In general, every {} defines a local
        scope in C/C++ and you can declare variables inside that
        scope but they cease to be defined outside the scope. The
        scope outside any {} (aka "global") or vars declared "static"
        can avoid this issue but not the redefine issue.
        > >
        > > Thanks for sharing this!
        > >
        > > Pete
        > >
        > >
        > >> On 6/24/20 12:43 PM, Huan Truong via TriEmbed wrote:
        > >> This has taken me way more time than I thought, but
        finishing this
        > >> retrofit is a big achievement for me. It's really silly
        and serves
        > >> exactly no purpose other than RE'ing something no one
        cares about. So
        > >> I just want to share for some shits and giggles.
        > >>
        > >>
        
http://www.tnhh.net/posts/adventures-hacking-fake-vivitar-vintage-radio.html
        > >>
        > >>
        > >>
        > >>
        > >>
        > >
        > > _______________________________________________
        > > Triangle, NC Embedded Computing mailing list
        > >
        > > To post message: [email protected]
        <mailto:[email protected]>
        > > List info:
        http://mail.triembed.org/mailman/listinfo/triembed_triembed.org
        > > TriEmbed web site: http://TriEmbed.org
        > > To unsubscribe, click link and send a blank message:
        mailto:[email protected]
        <mailto:[email protected]>?subject=unsubscribe
        > >
        > >
        > > _______________________________________________
        > > Triangle, NC Embedded Computing mailing list
        > >
        > > To post message: [email protected]
        <mailto:[email protected]>
        > > List info:
        http://mail.triembed.org/mailman/listinfo/triembed_triembed.org
        > > TriEmbed web site: http://TriEmbed.org
        > > To unsubscribe, click link and send a blank message:
        mailto:[email protected]
        <mailto:[email protected]>?subject=unsubscribe
        > >
        >
        >
        > _______________________________________________
        > Triangle, NC Embedded Computing mailing list
        >
        > To post message: [email protected]
        <mailto:[email protected]>
        > List info:
        http://mail.triembed.org/mailman/listinfo/triembed_triembed.org
        > TriEmbed web site: http://TriEmbed.org
        > To unsubscribe, click link and send a blank message:
        mailto:[email protected]
        <mailto:[email protected]>?subject=unsubscribe
        >


--
        Huan Truong
        www tnhh.net <http://tnhh.net> / twitter @huant

        _______________________________________________
        Triangle, NC Embedded Computing mailing list

        To post message: [email protected]
        <mailto:[email protected]>
        List info:
        http://mail.triembed.org/mailman/listinfo/triembed_triembed.org
        TriEmbed web site: http://TriEmbed.org
        To unsubscribe, click link and send a blank message:
        mailto:[email protected]
        <mailto:[email protected]>?subject=unsubscribe

        _______________________________________________
        Triangle, NC Embedded Computing mailing list

        To post message: [email protected]
        <mailto:[email protected]>
        List info:
        http://mail.triembed.org/mailman/listinfo/triembed_triembed.org
        TriEmbed web site: http://TriEmbed.org
        To unsubscribe, click link and send a blank message:
        mailto:[email protected]
        <mailto:[email protected]>?subject=unsubscribe

    _______________________________________________
    Triangle, NC Embedded Computing mailing list

    To post message: [email protected] <mailto:[email protected]>
    List info:
    http://mail.triembed.org/mailman/listinfo/triembed_triembed.org
    TriEmbed web site: http://TriEmbed.org
    To unsubscribe, click link and send a blank message:
    mailto:[email protected]
    <mailto:[email protected]>?subject=unsubscribe



--
Scott G. Hall
Raleigh, NC, USA
[email protected] <mailto:[email protected]>
/Although kindness is rarely a job, no matter what you do it's always an option./ _______________________________________________ Triangle, NC Embedded Computing mailing list To post message: [email protected] List info: http://mail.triembed.org/mailman/listinfo/triembed_triembed.org TriEmbed web site: http://TriEmbed.org To unsubscribe, click link and send a blank message: mailto:[email protected]?subject=unsubscribe

_______________________________________________
Triangle, NC Embedded Computing mailing list

To post message: [email protected]
List info: http://mail.triembed.org/mailman/listinfo/triembed_triembed.org
TriEmbed web site: http://TriEmbed.org
To unsubscribe, click link and send a blank message: 
mailto:[email protected]?subject=unsubscribe

_______________________________________________
Triangle, NC Embedded Computing mailing list

To post message: [email protected]
List info: http://mail.triembed.org/mailman/listinfo/triembed_triembed.org
TriEmbed web site: http://TriEmbed.org
To unsubscribe, click link and send a blank message: 
mailto:[email protected]?subject=unsubscribe

Reply via email to