Closed enelson1001 closed 3 years ago
I like the first approach though there's no need for a singleton, I think. Make the members static instead and have the create_-functions be static too. The drawback to that solutions is that you can't destroy the master before program exit, but I don't think that is a problem?
This discussion can be closed
Background
Approach #1
In this approach a singleton is used in creating a Master. The Master has an empty constructor and some new methods.
Pros:
Cons:
Implementation details: I placed spi-bus-master initialization inside my DisplayDriver.cpp and inside SDCard.cpp. The spi-bus-master was initialized using the following statement.
The following is the header file MasterV1.
The cpp file for MasterV1.cpp
Approach #2
Requires the programmer to be more knowledgeable in the operation of SPI. In this approach creation of the SPI device was removed from the Master. The Master would only be used for initialization of the spi-bus-master. The programmer would place the initialization of the Master before object creation of the SDCard and the derived SPIDevice (ex LCDSpi). The object creation of a derived SPIDevice (ex LCDSpi) would be done the normal way and not thru Master::create_device. The mutex would be a variable in SPIDevice and not passed in as part of the constructor.
Pros: Simplifies SPIMaster and SPIDevice creation.
Cons: Requires the programmer to be more knowledgeable in SPI operation.
Implementation details: I placed spi-bus-master initialization in my App.cpp. Placed my LCDSpi instantiation inside my DisplayDriver.cpp Did not do anything special with SDCard upon using the new SDCard.cpp
The following is the header file.
The following is the cpp file.
Approach #3
In this approach the programmer would place the intialization of the Master before object creation of the SDCard and the derived SPIDevice (ex LCDSpi). Then the classes that rely on the SPI Master would have a reference to the Master passed in as part of the constructor of those classes. I did not do this approach because (1) was not sure how it would work in multi thread design and (2) seem to clutter the existing class that rely on the SPI Master.
New SDCard cpp file (not final needs more work)
Note The deinit() method is not shown.
Recommendations
Are any of these approaches a good staring point for a pull request or did you have something compeletey different in mind?. Let me know how you want to proceed.