Due to the cyclic dependency issues, rust part of the firmware can not import std create and therefore it does not have io capabilities, including 'println!'. As a result, C 'printf' function is exposed to rust as an external function.
It is a useful feature to have it because as
developers we may need to debug many parts of the
rust code when we are not using debuggers. Also,
in projects such as simulator, firmware is mainly
debugged with gdb. Hence there is limited flexibility of debugging when execution jumps to rust. In addition, simulator could print some of the ui elements of
firmware to stdout in this way.
Due to the cyclic dependency issues, rust part of the firmware can not import std create and therefore it does not have io capabilities, including 'println!'. As a result, C 'printf' function is exposed to rust as an external function.
It is a useful feature to have it because as developers we may need to debug many parts of the rust code when we are not using debuggers. Also, in projects such as simulator, firmware is mainly debugged with gdb. Hence there is limited flexibility of debugging when execution jumps to rust. In addition, simulator could print some of the ui elements of firmware to stdout in this way.