애드센스와이드


시스템변수의 데이터를 배열 형식으로 쉽게 가져오기 Vector(CANoe)

Data타입 파라메터를 갖는 여러 개의 시스템 변수값을 받아와서 CAPL로 처리하려 할 때 문자열 배열을 구성하여
변수명을 처리하여 for문으로 코드를 간결히 줄이는 방법을 아래와 같이 정리해보았다.


1. 배열 처리 전
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
    diagResponse this resp;
    byte buffer[4][4];
    long copiedBytes = 4;
    int result;
    int i;
    dword tpmsId[4];
  
    struct WrapDword
    {
        dword dw;
    } dwordWrapper;
 
    result = sysGetVariableData("Common""svTpmsId1", buffer[0], copiedBytes);
    result = sysGetVariableData("Common""svTpmsId2", buffer[1], copiedBytes);
    result = sysGetVariableData("Common""svTpmsId3", buffer[2], copiedBytes);
    result = sysGetVariableData("Common""svTpmsId4", buffer[3], copiedBytes);
 
    for (i=0;i<4;i++)
    {
        write("sysGetVariableData Result [%d] = %d", i, result);
        write("sysGetVariableData buffer [%d]: %02X%02X%02X%02X",i, buffer[i][0],buffer[i][1],buffer[i][2],buffer[i][3]);
        memcpy(dwordWrapper, buffer[i]);
        tpmsId[i] = swapDWord(dwordWrapper.dw); // dwrod 스왑해서 순서를 바꿔줌
        write("tpmsId [%d]: %0#x", i, tpmsId[i]);
    }
 
cs



2. 배열 처리 후
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    diagResponse this resp;
    byte buffer[4][4];
    long copiedBytes = 4;
    int result;
    int i;
    dword tpmsId[4];
  
    struct WrapDword
    {
        dword dw;
    } dwordWrapper;
 
    char sysVarTpmsId[4][10= {"svTpmsId1","svTpmsId2","svTpmsId3","svTpmsId4"};
    
    for (i=0;i<4;i++)
    {
        result = sysGetVariableData("Common", sysVarTpmsId[i], buffer[i], copiedBytes);
        write("sysGetVariableData Result [%d] = %d", i, result);
        write("sysGetVariableData buffer [%d]: %02X%02X%02X%02X",i, buffer[i][0],buffer[i][1],buffer[i][2],buffer[i][3]);
        memcpy(dwordWrapper, buffer[i]);
        tpmsId[i] = swapDWord(dwordWrapper.dw); // dwrod 스왑해서 순서를 바꿔줌
        write("tpmsId [%d]: %0#x", i, tpmsId[i]);
    }
cs



덧글

  • sss 2021/11/29 21:09 # 삭제 답글

    wjdalstn930@naver.com 입니다
    On env 시그널로
    신호 받아 왔는데 너무 일괄처리되서 중간중간 딜레이를 넣고 싶은데 어떻게 하시는지요ㅜ
  • 완죤쵸보 2022/09/08 13:33 #

    안녕하세요. 딜레이를 CAPL로 넣는 방은 따로 없습니다.
    다만, 임의로 펑션을 만드셔서 딜레이를 넣을 수는 있어요.
    하지만, 딜레이를 크게 잡으면 그만큼 프리징이 생깁니다.
    크로스쓰레드를 생성하는게 안되더라구요. CAPL은...
    제가 조만간 CAPL관련 타이머 글을 올려둘테니 참고하시면 좋겠습니다.
댓글 입력 영역


이 이글루를 링크한 사람 (블랙)

4