Click here to Skip to main content
15,881,697 members
Home / Discussions / ATL / WTL / STL
   

ATL / WTL / STL

 
Questionhow to implement CButton as CListbox item Pin
rtischer82776-May-22 2:51
rtischer82776-May-22 2:51 
AnswerRe: how to implement CButton as CListbox item Pin
CHill606-May-22 5:12
mveCHill606-May-22 5:12 
GeneralRe: how to implement CButton as CListbox item Pin
rtischer82779-May-22 1:56
rtischer82779-May-22 1:56 
AnswerRe: how to implement CButton as CListbox item Pin
longjmp18-Nov-22 7:44
longjmp18-Nov-22 7:44 
QuestionHow can I get access to CXXView variables from a Parent Class in MFC Pin
Member 1503370419-Jan-21 7:34
Member 1503370419-Jan-21 7:34 
AnswerRe: How can I get access to CXXView variables from a Parent Class in MFC Pin
Victor Nijegorodov19-Jan-21 20:52
Victor Nijegorodov19-Jan-21 20:52 
GeneralRe: How can I get access to CXXView variables from a Parent Class in MFC Pin
Member 1503370419-Jan-21 23:13
Member 1503370419-Jan-21 23:13 
GeneralRe: How can I get access to CXXView variables from a Parent Class in MFC Pin
Victor Nijegorodov20-Jan-21 8:10
Victor Nijegorodov20-Jan-21 8:10 
GeneralRe: How can I get access to CXXView variables from a Parent Class in MFC Pin
Member 1503370421-Jan-21 5:58
Member 1503370421-Jan-21 5:58 
Questioncode of this question Pin
avadhnaresh kushwaha12-Aug-20 8:17
avadhnaresh kushwaha12-Aug-20 8:17 
AnswerRe: code of this question Pin
Richard MacCutchan12-Aug-20 8:19
mveRichard MacCutchan12-Aug-20 8:19 
QuestionKeypad locks Pin
kalberts7-Mar-20 13:23
kalberts7-Mar-20 13:23 
QuestionTo insert a node at the back of a XOR doubly linked list Pin
Tarun Jha17-Oct-19 9:38
Tarun Jha17-Oct-19 9:38 
AnswerRe: To insert a node at the back of a XOR doubly linked list Pin
ZurdoDev10-Jan-20 1:02
professionalZurdoDev10-Jan-20 1:02 
QuestionWhy non-template function does not compile where as template function compiles? Pin
PBMBJoshi2-May-19 23:23
PBMBJoshi2-May-19 23:23 
AnswerRe: Why non-template function does not compile where as template function compiles? Pin
Richard MacCutchan2-May-19 23:29
mveRichard MacCutchan2-May-19 23:29 
AnswerRe: Why non-template function does not compile where as template function compiles? Pin
k505410-Oct-19 8:53
mvek505410-Oct-19 8:53 
QuestionAdvice on interdependent asynchronous functions and task queuing? Pin
arnold_w7-Feb-19 23:07
arnold_w7-Feb-19 23:07 
I am working with embedded programming in standard C and there are 2 microcontrollers communicating with each other using a home-made SPI-protocol. In addition, microcontroller 2 has a CAN-bus that should also (indirectly) be fully accessible from microcontroller 1. The scheduler and task queues are also home-made so no realtime operating system is used. My tasks look like this:
C++
void (*task_t)(uint8_t* taskData, uint16_t sizeOfTaskDataInBytes);
My functions to add 1 or 2 tasks look like this:
C++
typedef enum {
    TASK_IN_WAIT_PHASE      = 0,
    TASK_FINISHED           = 1
} taskStatus_e;

typedef taskStatus_e (*getTaskStatusCallback_t)(uint8_t* data, uint16_t dataSizeBytes);

Bool_t queueTask(taskQueueSelector_e, task_t, uint8_t* data, uint16_t dataSizeBytes, getTaskStatusCallback_t);
Bool_t queue2Tasks(taskQueueSelector_e, task_t task1, uint8_t* data1, uint16_t data1SizeBytes, getTaskStatusCallback_t getTaskStatusCallback1, task_t task2, uint8_t* data2, uint16_t data2SizeBytes, getTaskStatusCallback_t getTaskStatusCallback2);
When microcontroller 1 wants to read from microcontroller 2 over SPI, the following code is used:
C++
struct SPI_secretData_s {
    volatile Bool_t                    accessInProgress;
    volatile int8_t                    numRetriesLeft;
};

#define PLEASE_SEE_NUM_REGS_TO_ACCESS_PARAMETER     (1)

struct SPI_readRegsTaskParams_s {
    struct SPI_secretData_s            secretData;
    volatile uint32_t                  startAddr;
    volatile uint16_t                  numRegsToAccess;
    volatile SPI_readStatus_e          readStatus;
    volatile uint16_t                  readBuffer[PLEASE_SEE_NUM_REGS_TO_ACCESS_PARAMETER];
};

queue2Tasks(SPI_QUEUE_SELECTOR, SPI_readRegs, (uint8_t*)&SPI_readRegsTaskParams, sizeof(SPI_readRegsTaskParams), SPI_getTaskStatusCallback, SPI_handleReadIsFinished, NULL, 0, NULL);

taskStatus_e SPI_getTaskStatusCallback(uint8_t* data, uint16_t dataSizeBytes) {
    struct SPI_readRegsTaskParams_s* SPI_readRegsTaskParams = (struct SPI_readRegsTaskParams_s*)data;
    return (SPI_readRegsTaskParams->secretData.accessInProgress) ? TASK_IN_WAIT_PHASE : TASK_FINISHED;
}

uint32_t SPI_handleReadIsFinished(uint8_t* notUsed, uint16_t sizeOfNotUsedInBytes) {
    struct SPI_readRegsTaskParams_s* SPI_readRegsTaskParams = (struct SPI_readRegsTaskParams_s*)getPreviousTaskData();
    //... Do what you need to do with the read data...
}
When microcontroller 2 wants to read from the CAN-bus, the following code is used:
C++
struct CAN_secretData_s {
    volatile Bool_t                         accessInProgress;
};

struct CAN_readRegsTaskParams_s {
             struct CAN_secretData_s        secretData;
    volatile uint32_t                       startAddr;
    volatile uint8_t                        numRegsToReadMax4;
    volatile uint16_t                       readRegsBuffer[4];
    volatile CAN_readStatus_e               readStatus;
};

queue2Tasks(CAN_QUEUE_SELECTOR, CAN_readRegs, (uint8_t*)&CAN_readRegsTaskParams, sizeof(CAN_readRegsTaskParams), CAN_getTaskStatusCallback, CAN_handleReadIsFinished, NULL, 0, NULL);

taskStatus_e CAN_getTaskStatusCallback(uint8_t* data, uint16_t dataSizeBytes) {
    struct CAN_readRegsTaskParams_s* CAN_readRegsTaskParams = (struct CAN_readRegsTaskParams_s*)data;
    return (CAN_readRegsTaskParams->secretData.accessInProgress) ? TASK_IN_WAIT_PHASE : TASK_FINISHED;

uint32_t CAN_handleReadIsFinished(uint8_t* notUsed, uint16_t sizeOfNotUsedInBytes) {
    struct CAN_readRegsTaskParams_s* CAN_readRegsTaskParams = (struct CAN_readRegsTaskParams_s*)getPreviousTaskData();
    //... Do what you need to do with the read data...
}

Could someone please suggest how I should handle the case when microcontroller 1 wants to read from the CAN-bus, via microcontroller 2?

modified 8-Feb-19 5:20am.

AnswerRe: Advice on interdependent asynchronous functions and task queuing? Pin
arnold_w7-Feb-19 23:34
arnold_w7-Feb-19 23:34 
QuestionRecommended way to deal with queues and pointers to buffers Pin
arnold_w3-Feb-19 9:09
arnold_w3-Feb-19 9:09 
AnswerRe: Recommended way to deal with queues and pointers to buffers Pin
Richard MacCutchan3-Feb-19 22:19
mveRichard MacCutchan3-Feb-19 22:19 
GeneralRe: Recommended way to deal with queues and pointers to buffers Pin
arnold_w3-Feb-19 23:40
arnold_w3-Feb-19 23:40 
GeneralRe: Recommended way to deal with queues and pointers to buffers Pin
Richard MacCutchan3-Feb-19 23:48
mveRichard MacCutchan3-Feb-19 23:48 
GeneralRe: Recommended way to deal with queues and pointers to buffers Pin
arnold_w4-Feb-19 3:15
arnold_w4-Feb-19 3:15 
GeneralRe: Recommended way to deal with queues and pointers to buffers Pin
Richard MacCutchan4-Feb-19 3:46
mveRichard MacCutchan4-Feb-19 3:46 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.