지금 집에서 혼자 디버깅중인데...
기현상을 발견해서 조언좀...
코드 딱 두줄이야....
...
write_pos = write_pos_rs % BUFF_SIZE_RS;
printk("[BV]bv_write_RS %d = %d %d\n", write_pos, write_pos_rs, BUFF_SIZE_RS);
...
결과가 어떻냐면....
[ 95.983985] [BV]bv_write_RS 0 = 127 6350
[ 95.998984] [BV]bv_write_RS 0 = 254 6350
[ 96.013985] [BV]bv_write_RS 0 = 381 6350
[ 96.028980] [BV]bv_write_RS 0 = 508 6350
[ 96.043985] [BV]bv_write_RS 0 = 635 6350
[ 96.058980] [BV]bv_write_RS 0 = 762 6350
[ 96.073810] [BV]bv_write_RS 0 = 889 6350
[ 96.088811] [BV]bv_write_RS 0 = 1016 6350
127을 6350으로 나눈 나머지가 왜 0이 나오지?
127이 안나오고?
변수들은 전부 unsigned int 구...
linux kernel 3.10 이야...
이게 무슨일인지 당최...ㅜ
썸바리 헬미..ㅠㅜㅜ
printk 는 뭐임?
음...커널에서 쓰는 printf 라고 보면 됨..
음 비논리적인 상황이네. 저 3개의 항을 3개의 새 변수에 담아서 한 번 찍어볼래?
헐...새 변수에 담아서 하니까 정상적이네..뭐지.
#define BUFF_SIZE_RS 6350
이 디파인이 문제엿어.. 이거랑 같이 엮으니까 주옥되네..
ㅇㅇ C 는 안쓴지 오랜지라 세세한 버그나 충돌사항들 기억이 안난다. 찾은듯 하니 다행이네~
printf 가 묵시적인 variadic 형태다 보니, #define 을 직접 사용할 경우 타입을 알 수가 없어.
관심 고마워 넙죽
그래서 C 의 calling convension 상, 우측 파라메터부터 스택에 집어넣으면서 꼬인거임.
int 타입으로 가정되지 않아서 그런것일듯.