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