Is there a bug with code generation for C2000 device? (R2013b)

1 回表示 (過去 30 日間)
Dimitri CORNILLON
Dimitri CORNILLON 2014 年 5 月 16 日
回答済み: Ketan 2015 年 9 月 15 日
Hi,
Here is my problem:
Is use Embedded Coder to generate code for C2000 from a Simulink project.
I noticed that one of my S-functions create a memcpy() C function. The generated code is the following:
/*
* Output and update for atomic system:
* '<S1>/MATLAB Function'
* '<S1>/MATLAB Function2'
*/
void test_gup35_MATLABFunction(real32_T rtu_u, B_MATLABFunction_test_gup35_T
*localB)
{
uint32_T y;
/* MATLAB Function 'Fct_algo_2kHz/MATLAB Function': '<S8>:1' */
/* '<S8>:1:4' */
memcpy(&y, &rtu_u, 4UL);
localB->y = y;
}
S-function .m
I tested the code with Code Composer Studio in debugger mode. The 4UL memcpy() argument is not correct. On C2000 sizeof(uint32_T) returns 2, not 4! So the result is a wrong execution of the software due to the to large copy. If I change the line memcpy(&y, &rtu_u, 4UL); by memcpy(&y, &rtu_u, sizeof(y)); it works.
Is there a parameter in Simulink to change the argument size? Or is it a bug from Embedded Coder?
Thanks, Dimitri

回答 (1 件)

Ketan
Ketan 2015 年 9 月 15 日
This is a known issue. Please see the following EBR for a workaround:
https://www.mathworks.com/support/bugreports/1034916

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by