A system level approach in designing dual-duplex fault tolerant embedded systems