Today I learned about CPUlator Computer System Simulator while watching Assembly Language Programming with ARM – Full Tutorial for Beginners.
Category Archives: Diary
C Pointer Operator Precedence
I have to think carefully about this every single bloody time. As seen here.
And… here we are
This week what we have all been fearing has happened to me: GitHub Copilot generated code for me which seems to meet all the requirements but which I don’t understand very much at all.
To date GitHub Copilot for me has just been mostly a useful auto-complete tool and it hasn’t given me any code which I didn’t understand. But with this code (to control two different hardware timers/counters on my Arduino) I don’t really understand it at all. I have passing familiarity with some of the registers used because I saw them named in the datasheet (which I have only skimmed so far) but basically I don’t understand how this works.
It is tempting to ignore the fact that I don’t fully understand and move on, but there’s a part of me which wants to return to the datasheet so I can understand what every assignment GitHub Copilot offered actually does and what every value it calculated implies. Is that the best use of my time?
Controlling Arduino Uno with Serial commands
@kline helped me with Phase 1 of my Crustacean Chirpy Chip Challenge project, which I have completed (sort of). I got the programming done but I didn’t do all the reading (yet).
Note to self: My Arduino Uno knockoff identifies itself as a “QinHeng Electronics USB Serial” USB device.
This is my code:
enum state { OFF, ON, FLASH }; enum state state = OFF; int blink_pin = 13; void setup() { pinMode( blink_pin, OUTPUT ); Serial.begin( 9600 ); } void loop() { if ( Serial.available() > 0 ) { read_command(); } switch ( state ) { case ON : digitalWrite( blink_pin, HIGH ); break; case OFF : digitalWrite( blink_pin, LOW ); break; case FLASH : int pin = digitalRead( blink_pin ); digitalWrite( blink_pin, !pin ); delay( 500 ); digitalWrite( blink_pin, pin ); delay( 500 ); break; } } void read_command() { String command = Serial.readString(); command.trim(); command.toLowerCase(); Serial.print( "Command: " ); Serial.println( command ); if ( command == "on" ) { state = ON; } else if ( command == "off" ) { state = OFF; } else if ( command == "flash" ) { state = FLASH; } else { Serial.println( "Unknown command." ); } }
The code which would actually implement the spec, as given:
void read_command() { char c = Serial.read(); switch ( c ) { case 'a' : state = ON; break; case 's' : state = OFF; break; } }
Data Analysis with Python for Excel Users – Full Course
Today I learned a little about Python, Jupyter, and Pandas in this video: Data Analysis with Python for Excel Users – Full Course.
PicoRC: PicoPSU on Retro Computers!
Today on 0084 A battery powered 486DX2/66 setup and a 386 motherboard with a fancy BIOS I learned about PicoRC: PicoPSU on Retro Computers and also ATX4VC: ATX Power on Retro Computers.
LTspice tutorial – EP4 How to import libraries and component models
I learned a lot today in this video: LTspice tutorial – EP4 How to import libraries and component models.
Descent3 Source Code
Today on lobsters there was a link to the Descent3 Source Code. Very cool.
Props to Corsair
Just wanted to say thank you publicly to Corsair. The case for my computer ‘charisma‘ is a Corsair Carbide 100R Silent Edition Mid-Tower ATX Case. I really love this case and in fact I have two of them.
Anyway I had a problem where one of the feet snapped off and I couldn’t find spares for sale anywhere on the internet. I applied for a replacement of the feet through the Corsair warranty process, which was comprehensive but relatively painless, and I am pleased to report that my new replacement feet arrived today.
I am a happy customer!