우선 툴체인.ini 파일에 있는 아래의 옵션을 변환하여 전역 변수의 const를 제거할 수 있습니다.

global_variable_nonconstant = 1

하지만 테스트 실행 시 기본적으로 생성되는 테스트 코드가 컴파일이 불가능하여 컨버팅 단계에서 에러가 발생합니다.

테스트 코드를 컴파일이 가능한 형태로 수정하여 테스트를 실행시키면 정상적으로 빌드가 가능합니다.

void Rte_MemCpy(void *destination, void *source, unsigned long num);

typedef unsigned char CanMsgData[8];
typedef unsigned char uint8;
CanMsgData data;
const CanMsgData Rte_C_CanMsgData_0 = {
  0U, 0U, 0U, 0U, 0U, 0U, 0U, 0U
};

void Rte_MemCpy(void *destination, void *source, unsigned long num)
{
}
void main(void)
{
 Rte_MemCpy(data, Rte_C_CanMsgData_0, sizeof(CanMsgData));
}

위와 같은 코드에서는 기본적으로 생성되는 테스트 코드는 아래와 같습니다.

/*Input*/
Rte_C_CanMsgData_0[0] = CS_UINT_INPUT(unsigned char,"Rte_C_CanMsgData_0[0]");
data[0] = CS_UINT_INPUT(unsigned char,"data[0]");

해당 Rte_C_CanMsgData_0는 const 전역 변수로 선언이 되어있기 때문에, 에러가 발생합니다.
error: expression must be a modifiable lvalue

해당 전역 변수의 테스트 정보를 사용자 코드로 바꾸어 다음과 같이 컴파일 가능한 형태로 수정해줍니다.

unsigned char * Rte_C_CanMsgData_Temp = (unsigned char *)Rte_C_CanMsgData_0;
// 주소를 가리키고 있으면 컴파일 시점에서는 const를 판별하지 못하여 컨버팅에서 컴파일이 정상적으로 되는 코드라고 판단하여 정상 동작함
// 런타임에서 const를 체크할 때는 global_variable_nonconstant 옵션으로 인해 이미 const가 제거된 상태로 런타임 에러에 걸리지 않음
Rte_C_CanMsgData_Temp[0] = CS_INT_INPUT(unsigned char, "Rte_C_CanMsgData_Temp[0]");
Rte_C_CanMsgData_Temp[1] = CS_INT_INPUT(unsigned char, "Rte_C_CanMsgData_Temp[1]");
Rte_C_CanMsgData_Temp[2] = CS_INT_INPUT(unsigned char, "Rte_C_CanMsgData_Temp[2]");
Rte_C_CanMsgData_Temp[3] = CS_INT_INPUT(unsigned char, "Rte_C_CanMsgData_Temp[3]");
Rte_C_CanMsgData_Temp[4] = CS_INT_INPUT(unsigned char, "Rte_C_CanMsgData_Temp[4]");

Need more help with this?
Don’t hesitate to contact us here.

Thanks for your feedback.