753 karma · joined February 20, 2016
(re: weird bug where calling __aeabi_uidiv calls __exidx_end, could be hard fault handler getting invoked due to either div by 0 or incorrect linkage - that M0 has a few caveats around this instruction that I vaguely recall needing specific compiler settings for)
Great write-up BTW - subscribe!
My first job out of school, working away from home and learning the ropes of embedded software.
The office was using on promise databases, email servers and the like, as was somewhat common at the time, but nothing much more than a a few robustified PCs and some networking infra. We were having internet problems being too far away from the exchange and so the telephone company was coming into replace the exchange over the weekend so everything was shutdown on the Friday night.
Monday morning comes by and we boot things up again, but no connectivity… Office is dissolving into chaos as phones were also down. British Telecom is demanded to return this very minute and figure it out!
An hour later a very flustered gentleman turns up and begins to debug a few sockets but finds them all dead. 1 minute later he is at the new exchange (that was inside our office), only to emerge from the room after 30 seconds looking extremely confused.
It turns out Dave, an extremely helpful chap who was in charge of some product final assembly had turned up at the office as normal at 7am and thought he would helpfully uninstall the old exchange and throw it in the skip we had rented for just that purpose. A quick wonder around to said skip found the exchange in there with a bunch of wiring - the helpful chap had really gone to town on this. Sadly, I was quick to identify that this was the new exchange, not the old by observing simply how fresh it looked and the BT chap came over to confirm. Because of the damage that had done to the wiring, it was not trivial to simply wire back the old exchange and so that was the end of office operations for a week.
A small company meeting was held where it was announced that “an error of judgement” had occurred and that we were to have some vacation - much of the in office equipment was taken offsite to get temporary connectivity so that sales could continue whilst we vacationed. Internet remained terrible until I left that gig, now blamed on all the wire patches needed to get the office back on line.
I half believe it was the presentation - dramatic, but also extremely clever choice of SACD source content with some theatre thrown in for good measure. However, that 12 minutes in a room in conference hall in London with the Nautilus speakers was something I will never forget for a "this is what money buys you" experience. Warm, huge dynamic range, concert hall experience - comfy chair and dim lights helped as well :)
At Tag, we built the "tag mclaren speakers f1" that had a lot of elements I feel borrowed from the B&W industrial design (but made F1 grade) - I used these daily for several years, but was never able to convince myself they were as good as that one time experience.
The VSCode environment is a huge upgrade from the stock Arduino UI and the piggybacking on the Pi as a development platform makes a ton of sense.
Nice work ShizukuIchi!
- unlocking the laptop (knowing an existing password, Apple ID or firmware password). Probably 3 in 10 laptops are non-trivial. I have 5 laptops with unknown firmware passwords that I am planning on removing the SPI flash on to wipe out the password (just for funsies... seems like an interesting challenge!)
- upgrading to Catalina via USB installation image. If the OS image is jumping several versions (or actually being downgraded from a security patch release), here be dragons. Typically the USB installer pulls down another installer via Wi-Fi and then has to perform a random "this disk needs an upgrade" routine which 50% of the time results in bad thing happening and I'd be left with the flashing question mark. Then its time to start over again.
- After installing and setting up Catalina (so I can smoke test the functionality), I'd wipe the disk and reinstall from USB one last time so it was fresh. Randomly, the re-install would fail in a mysterious way and I'd have to go around a third time.
Backbreaking work and I am extremely sick of of MacOS recovery right now (and the 1000 tricks needed to get each laptop back to factory condition), but totally worth it. Just today a teacher from Fremont wrote in with a heart breaking email about how much a difference a 2015 Mac Pro made to his day and how better his online teaching is because of it. Got through around 200 devices in total including some iPads.
During my adventures distributing / collecting these laptops, I caught COVID - no good deed goes un-punished. I'm pretty sure there are at least 5k more Mac's sitting in companies IT closets from where they renewed equipment for employees but couldn't throw away the 3 thousand dollar device they bought 3 years prior - donating these is a tax break as well so the companies would be best to dispose of them than keep them around.
6 weeks later, I am suffering from occasional severe fatigue still - these days, it manifests itself after 8-9 hours or so and results in a crash where I have to sleep for 40mins+. If I don’t struggle through and go to bed then, it will screw up my sleep schedule. During the 2 weeks of COVID, it was way worse and I could sleep 3/4s of an entire day and still be tired.
This is getting better - I push myself everyday just a little more and now can exercise for 2 hours straight and carry on, but it’s night and day different to pre-COVID behavior and I imagine it will be through to Christmas before I am back to “normal” (touch wood).
A lot to be said for the OG windows hook APIs and whatever modern magic they are grabbing into these days.
It shipped first in a STB for Roku, but that was happenstance vs any design intention.
The market for separate cell phone GPUs died off, but the die was manufactured still for the RPi.
- loss of ground
A vehicle OBD connector can at times, loose its GND pin. There are actually two GND pins - chassis and electrical that can sometimes disagree. Its possible for one of either of them to either (a) loose connectivity (b) bias towards the signal level or head towards a negative signal level (-2v was our typical observation).
To prevent an OBD protocol pin from dumping current down the channel, a complex HW/SW solution is needed to monitor and react quickly to prevent downstream ECUs from being fried.
- security
We built a custom debug tool based on CM-DAP (ARM debugger technology) that included OOB security paths to unlock a device for re-flashing / debugging. I think we made 500-1k of these in total for manufacturing/RMA/logistic purposes. This was super fun to work on :)
In theory, it could be done on a cellphone, but a ton of extra data is needed inc volumetric models of an engine (to calculate fuel usage accurately). Doing it server side makes it possible to build this in an agile method vs going to every single make/model and getting this right the first time.
i.e. if you uninstall the BT apps, change phone etc...
Working on these specific processors around 5 years ago, we implemented a serial port based "unlock" that would generate a challenge/response from the device that if correctly acknowledged, would unlock the JTAG whilst the chip has power (it locks again when it looses power). This worked great - we spent a lot of time on the UART driver to make sure it was super simple and robust during the period when it could listen to incoming bytes (no interrupts etc...).
On the mac, Version 3.4.3 is working fine with Catalina (10.15.4).
It adds in a virtual camera interface and you can configure a pipeline of sources or pipelines.
An easy setup is: - Webcam (set to FaceTime HD Camera) - Matrix effect
A more complex one is: - Add webcam - Select "movie" but press PIP - In the PIP Movie settings, "Swap with Video Source" - Mess with the Chroma key settings (you need a solid background color) for Chroma to work. I use a bed sheet :)
I'll circle back with the OBS/Syphon Pipeline/CamTwist shortly as it was much more involved!
However... it is a major MAJOR PITA to get going when I want to jump on a quick call and more than often I'm in and out of the meeting a few times because of annoying defaults or software I forgot to start. But that 1 in 10 prank feeling? Well worth the 9 false starts.
I'd love OBS to work on its own to remove a few more steps from my setup!
Well, now you have my interest! Is this a talent gap or fatigue in the organization? Sounds like a meaty challenge.