코드에서 가능하면 서명되지 않은 정수를 사용하는 습관이 있습니다. 서명 된 유형으로는 처리 할 수없는 부호없는 유형에 대해 2의 제곱으로 나누기가 가능하기 때문입니다. 속도는이 프로젝트에 중요합니다. 프로세서는 최대 40 MIPS에서 작동합니다.임베디드 플랫폼에서 (implicity signed) int 대신 unsigned int를 사용하는 것이 더 효율적입니까?
내 프로세서에는 18 사이클 나눗셈이 있지만 단일 사이클 배럴 시프터보다 오래 걸립니다. 따라서 속도를 높이기 위해 여기에 부호없는 정수를 사용하거나 다른 단점을 가져올 가치가 있습니까? 마이크로 칩의 dsPIC33F 시리즈 회원 인 dsPIC33FJ128GP802를 사용하고 있습니다. signed int와 unsigned int 모두에 대해 단일 사이클 곱하기를가집니다. 그것은 또한 부호와 제로 확장 명령을 가지고있다.
예를 들어 부호있는 정수와 부호없는 정수를 혼합 할 때이 코드가 생성됩니다.
026E4 97E80F mov.b [w15-24],w0
026E6 FB0000 se w0,w0
026E8 97E11F mov.b [w15-31],w2
026EA FB8102 ze w2,w2
026EC B98002 mul.ss w0,w2,w0
026EE 400600 add.w w0,w0,w12
026F0 FB8003 ze w3,w0
026F2 100770 subr.w w0,#16,w14
내가 C (의 dsPIC을위한 GCC.)
왜'typedef'를 사용하여 두 가지 방법으로 시도해보십시오 (그리고 벤치 마크)? –
출력 내용이 "서명되거나 서명되지 않은 상태로 사용되지만 함께 섞어서는 안됩니다"라고 생각합니다. –
@Karl Knechtel 대부분의 코드가 부호가있는 int로 중단됩니다. 또한 전용 스레드, 제한된 타이머 자원 및 연속 인터럽트가없는 경우 벤치마킹하기가 상당히 어렵습니다. –