문제

FPU가없는 마이크로 컨트롤러를 만들려고하는 플로트 라이브러리에서 쉽게 액세스 할 수 있도록 비트 필드를 사용하고 있습니다.

문제는 비트 필드에서 작동하게 할 수 없다는 것입니다. 구경하다:

typedef struct
{
   union{
    unsigned long mantissa: 23;
    unsigned long exponent: 8;
    unsigned long sign: 1;
    float all;

      };

}_float __attribute__((__packed__));

문제는 내가 액세스하거나 변경하려고 할 때 비트 필드를 각각 1,8,23 비트로 간주한다는 것입니다. 끝에서 23 비트이어야하지만 8 비트, 마지막 비트가되어야합니다. 비트 필드의 사용을 완전히 오해하지 않는 한. 나는 그것을 사용한다고 생각했다 포장 된 문제를 해결할 수는 있지만 보시다시피는 그렇지 않았습니다.

모든 도움이 정말 감사하겠습니다. 나는이 사이트로 두 번 이상 인터넷 검색을하면서 높은 희망을 가지고 있습니다.

도움이 되었습니까?

해결책

당신은 당신의 노조 내부에 구조물이 없을 수 있습니다.

typedef struct
{
    union{
       struct {
           unsigned long mantissa: 23;
           unsigned long exponent: 8;
           unsigned long sign: 1;
       } float_parts;
       float all;
    };
}_float __attribute__((__packed__));

Mantissa/지수 및 표시의 순서는 CPU의 Endianess에 달려 있습니다.

다른 팁

문제는 그것이 노조라는 것입니다. '구조'여야합니다.

GLIBC 플랫폼에있는 경우 IEEE754.H 헤더 파일을 살펴볼 수 있습니다. 그것은 endianess 물건을 돌 봅니다. 그렇지 않다면 여전히 그것을 살펴볼 가치가 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top