I was about to go through the thermal camera code today and comment and neaten things up, when my friend walked into the room. He had brought me a gift- a gift of bananas. He knows I like bananas, so he brought some to the dorms for me. We decided to make some coffee, so I put the bananas on my computer for later. These bananas led me down a long and exhausting rabbit hole by causing a very tricky bug. By the time I got back to my coding perch, I had somewhat forgotten about the bananas, which were long since consumed along with the coffee.
I made some modifications and hit the build button, and tired to upload the code, but it wouldn’t work. I found out that I was getting an error during the debug! The log read:
[builtin](2): Including file ‘C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR Assembler\Native\2.1.39.232\avrassembler\Include\m328Pdef.inc’
C:\Users\alouie\Documents\Atmel Studio\6.1\ThermalApp2\ThermalApp2\ThermalApp2.asm(10): Including file ‘C:\Users\alouie\Desktop\m328Pdef.inc’
token too large, exceeds YYLMAX
I tried everything to fix the situation. I copied the code into a new project, and it it wouldn’t work, so I hadn’t messed up my build options. I tried getting a new version of the m328def.inc files, which turned out to be up to date. I tried commenting out the .inc file (since it looked like it was throwing the error), but I knew the .inc file was good because other projects would build. The one thing that did work was deleting all the code and just having a loop like:
main
rjmp main
When I did this, I copied the whole file into sublimetext as kind of a giant clipboard. This turned out to be really important to finding the bug. Now that I knew I could get blank code to build, I started adding things back into the code. I knew the bug had something to do with line size, or a missing “, but I couldn’t find anything out of the ordinary. Once I hit the main loop section of the code, the error became apparent.
There were thousands of space characters, all on one line.
The banana had landed on the space key, and typed out about 28 thousand spaces. Of all keys, that is the worst one it could have landed on. Infinite return lines, or a long string of characters is easy to catch, but whitespace is invisible in atmel studio. In sublime text it is wrapped, which fills up lines, and there is no new line number, so it is easy to see.
What a bizarre bug.