News for hackers. Stuff that matters.
Re:Embedded Rust Experiments: Is My STM32 MCU Running Fast? by userbinator on Sunday January 27, 2019 @11:47PM (#19015380)
That diagram of the clocking system is a good example of how the bigger MCUs are like having a whole computer on a single chip, with all the implications of complexity that brings. It's not enough to set up a single clock; you also need to make sure the clocks to the peripherals that are in use are also what you need them to be.

(I wish such diagrams in datasheets would let you click on the appropriate blocks to jump directly to their registers and description sections.)

Re:Embedded Rust Experiments: Is My STM32 MCU Running Fast? by retSava on Monday January 28, 2019 @07:21AM (#19016907)
Yeah, even a small part such as the cc1310 from Texas Instruments (a sub-GHz wireless SOC for <10USD MOQ-1) is a triple-core device. One Cortex-M3 as the main core, a Cortex-something as the radio core, and a Sensor Controller (I'm guessing msp430-derived) as a low-power helper core. For the latter, you actually compile a binary blob that you push to it in firmware, and the format is not ARM.

Quite complex stuff.

Re:Embedded Rust Experiments: Is My STM32 MCU Running Fast? by henrikeh on Monday January 28, 2019 @12:43AM (#19015532)
Vendor tools for STM provide almost exactly what you wish for for the clock diagram.

Example: http://www.emcu.it/STM32clk/STM32clk.html

Re:Embedded Rust Experiments: Is My STM32 MCU Running Fast? by Rebelgecko on Monday January 28, 2019 @03:34AM (#19016000)
I haven't used the STM Cube configurator for a while, but last time I did it was almost at FPGA software levels of user-unfriendlieness. If you changed the indentation on a magic comment in your code and then adjusted one of the clocks, CUBE would clobber your existing code and silently delete it.
Re:Embedded Rust Experiments: Is My STM32 MCU Running Fast? by henrikeh on Monday January 28, 2019 @04:06AM (#19016113)
Yes, Cube autogenerates a lot of code and will overwrite things that don’t follow the inserted markers.

The original article even includes an example of using Cube to configure the clocks and then use those configurations together with Rust.

I agree that it isn’t ideal at all and kinda wonky. But more links in the datasheets would be nice.

Re:Embedded Rust Experiments: Is My STM32 MCU Running Fast? by edoo on Sunday January 27, 2019 @11:04PM (#19015265)
It is always good to get to know your MCUs. When I first started using STM32s I would also scope the crystal and then toggle some pins as fast as possible to make sure.

Many gadgets later I trust the programmatic detection of external crystal use and appropriate PLL function. If you HAVE to know if the crystal fails you can use the CSS (Clock Security System) to generate interrupts in case you fall back to the internal oscillator.

Re:Embedded Rust Experiments: Is My STM32 MCU Running Fast? by ChuckNorris89 on Monday January 28, 2019 @03:13AM (#19015929)
TIP: You should never scope a crystal directly as that could damage it. In production, for testing crystals, we output a PWM on a pin using the crystal as a source and measure that if the MCU doesn't have a built in functionality.
Re:Embedded Rust Experiments: Is My STM32 MCU Running Fast? by philpem on Monday January 28, 2019 @04:51AM (#19016259)
I've never heard of putting a scope probe on a crystal damaging it, though the load resistance (typically 1Megohm to ground) and capacitance (~5pF to ground) will affect the frequency.

This is why the PWM-out is useful -- it gives you a buffered, divided-down version of the crystal clock.

Re:Embedded Rust Experiments: Is My STM32 MCU Running Fast? by berti on Monday January 28, 2019 @03:23AM (#19015967)
STM32 has MCO outputs that can be used to more directly pass various (divided) clocks through.
Re:Embedded Rust Experiments: Is My STM32 MCU Running Fast? by edoo on Monday January 28, 2019 @10:34AM (#19018190)
Interesting, but maybe not required. You can do a programmatic check of the crystal and PLL. I've had over 200k devices fabbed and deployed without ever directly testing a single crystal. What kind of error rate do you find?
Re:Embedded Rust Experiments: Is My STM32 MCU Running Fast? by carlmr on Monday January 28, 2019 @04:53AM (#19016269)
I think the hybrid approach, high-level Rust + low-level C is actually preferable. Rust really shines at the high-level things and you do what C is good at on the drivers.
Re:Embedded Rust Experiments: Is My STM32 MCU Running Fast? by gpm on Monday January 28, 2019 @06:31AM (#19016646)
I don't see what C gives you at a low level that rust doesn't.

You can translate C line by line into identical rust at no cost except that you have to write "unsafe" once per fn. With the exception of macros, but rust's replacements there are just better.

Keeping everything in one language seems like a worthwhile reason not to use C to me.

Re:Embedded Rust Experiments: Is My STM32 MCU Running Fast? by mrob on Monday January 28, 2019 @09:00AM (#19017431)
C gives you better options for static analysis of worst case stack usage, e.g. https://github.com/PeterMcKinnis/WorstCaseStack

Proprietary software for this is also available with superior UI and features, and I expect people serious about high-reliability embedded systems already use it.

Rust Nightly does have limited support for printing stack usage by function with -Z emit-stack-sizes, but I could not find anything for analysis of worst case stack usage in whole programs.

Re:Embedded Rust Experiments: Is My STM32 MCU Running Fast? by gpm on Monday January 28, 2019 @09:51AM (#19017787)
Presumably you lose static analysis benefits as soon as you are mixing languages though?
Re:Embedded Rust Experiments: Is My STM32 MCU Running Fast? by michaelt on Monday January 28, 2019 @09:32AM (#19017633)
The 'embedded' market runs the gamut from $0.05 to $15+ and within that range, users have different concerns.

At the $15 end of the market, developers have a good chance of wanting to import code from other sources. For example, depending on the application, they might need an RTOS to provide multi-threading, FAT32 for an SD card, or a network stack with SSL implementation.

Often, the developer will want a 'lightweight' library, i.e. one intended for microcontrollers, and often this will be written in C.

Re:Embedded Rust Experiments: Is My STM32 MCU Running Fast? by anmorgan on Monday January 28, 2019 @07:51AM (#19017043)
Mainly because of the extensive Hardware Abstraction Layers (HAL) libraries available from most mcu vendors
Re:Embedded Rust Experiments: Is My STM32 MCU Running Fast? by nraynaud on Monday January 28, 2019 @08:29AM (#19017251)
1) they are crap and everybody hate them 2) I don’t see the point in buying an MCU whose timer is incredibly advanced (look at TIM1 and TIM8 on an STM32) and abstracting it afterwards.
Re:Embedded Rust Experiments: Is My STM32 MCU Running Fast? by neltnerb on Sunday January 27, 2019 @11:09PM (#19015276)
Very nice writeup, those clock registers get so hairy and your notes are phenomenal!