Matlab with external C function: coder.ceval pass a pointer to a structure (including arrays) to a external function
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hello,
I kinda want to do a similar thing as here , exept that the structure I want to pass includes vectors or arrays. Therefore the code is not working.
In general I try to write a driver block for Simulink for UART communication for a raspberry pi with a Matlab System. The UART code is working fine.
In my System code I create a struct and fill it with the inputs of the System. Now I want to pass a pointer to that struct to my extern send function (with some other arguments).
Here is the Code:
toFluco_struct = struct('velocity',u1,'heading',u2);
coder.cinclude('piData.h');
coder.cstructname(toFluco_struct, 'piData_toFluco_t', 'extern');
coder.ceval('pidata_send', obj.fd, obj.packetID, coder.ref(piData_toFluco), obj.size);
piData.h
typedef struct { float velocity [3]; float heading [5]; } piData_toFluco_t;
void pidata_send(int uartsocket, uint8_t packet_id, piData_toFluco_t* packet_ptr, uint8_t size);
piData.c
void pidata_send(int uartsocket, uint8_t packet_id, piData_toFluco_t* packet_ptr, uint8_t size){
uart_send(uartsocket, "\xff\xff\xff\xff", 4); // Start-Byte
uart_send(uartsocket, &packet_id, 1); //Packet ID senden
uart_send(uartsocket, packet_ptr, size); //Payload senden
I'm getting the following error message when compiling:
Simulink detected an error 'coder.ref may only be applied to an expression of type V or V(E) where V is a variable and E is a numeric expression.'.
I would appreciate any help
Cheers Michael
0 Kommentare
Antworten (1)
Akshat Dalal
am 2 Mär. 2025
Hi Michael,
The error message you're encountering suggests that the coder.ref function is being used incorrectly. This function requires a variable, not an expression or a temporary value, as its argument. You will have to create a variable of the new struct type and then pass it as an argument to coder.ref. Here is how the updated code might look:
coder.cstructname(toFluco_struct, 'piData_toFluco_t', 'extern');
piData_toFluco = toFluco_struct; % Create a variable to hold the structure
coder.ceval('pidata_send', obj.fd, obj.packetID, coder.ref(piData_toFluco), obj.size); % Call the external C function
Hope this helps!
0 Kommentare
Siehe auch
Kategorien
Mehr zu Development Computer Setup finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!