On 02/12/2016 11:38 AM, Mitsis, Peter wrote:
-----Original Message-----[Peter] - We generally try to operate under the assumption that failures will not occur.
From: Benjamin Walsh [mailto:benjamin.walsh(a)windriver.com]
Sent: February-12-16 1:37 PM
Subject: [devel] RFC: return type of functions passed to DEVICE_INIT()
For some reason, the signature of functions passed to the DEVICE_INIT()
<init_fn> parameter has a return type of 'int', but the return value is never
checked within _sys_device_do_config_level(). Some init functions do return an
error code, such as the ARC init code and the bluetooth init routines, but that
just gets ignored.
Question: should we have init functions of return type 'void' then ?
That would shave a few bytes in every init function if we don't have to return a
That being said, we do have some instances where we do check for errors, and some of these are considered fatal.
My take on it is that for Zephyr a failed device initialization should be considered a fatal event.
My expectation is that the Zephyr user will only be enabling relevant (and important) devices to their project.
If one of these devices should fail, then that is a serious system error and _NanoFatalErrorHandler() should be invoked.
If this train of thought holds up to scrutiny, and if the aim is to save a few bytes then I would think that it would be better to have the device initialization routines return a failure code and have _sys_device_do_config_level() check for it and invoke the fatal error handler upon the detection of failure. Otherwise we duplicate the overhead of calling the fatal error handler in each device initialization routine.
Sorry for the slow response. I agree with Peter here I think we should
be checking the return value and doing something useful with the
result. Maybe not _NanoFatalErrorHandler() but something notifying
the application that something bad happened. A given device not
initializing may not be fatal to the the whole application, just one
feature is currently unavailable.
How we could/should report this type of error is an open question :-).
Just my two cents.
Benjamin Walsh, SMTS
Wind River Rocket
Zephyr kernel maintainer