MIPI_BaseC_WebinarFRTK/26_Seminar13/27_Microcontrollers/2_1_bits.c
2024-11-14 08:39:22 +03:00

58 lines
1.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//~ 1. Написать пару функций, одна из которых будет устанавливать все биты, а другая — снимать по маске.
//~ Возможное решение: bits.c
//~ Простейшая вещь, но довольно полезная (особенно в контексте того, что именно так работает большинство флешек).
#include <stdio.h>
#include <stdint.h>
//Начало решения
void set_all_bits (void *arg)
{
//Писать 0xFFFFFFFFFFFFFFFF тоже не очень,
//так как мы вообще говоря не знаем длину типа.
//~0 гарантирует единичные биты.
* (unsigned int*)arg = ~0;
}
int reset_some_bits(void *dest, unsigned int val)
{
*(unsigned int*)dest &= val;//приведение типов
return (*(unsigned int*)dest == val);
}
int set_some_bits(void *dest, unsigned int val)
{
*(unsigned int*)dest |= val;//приведение типов
return (*(unsigned int*)dest == val);
}
// Конец решения
int main()
{
float var = 0;
uint32_t a=4095;
uint32_t b=2000;
uint32_t c=4095;
uint32_t d=0xffff;
int status = 0;
//~ scanf("%x%x%x%x", &a, &b, &c, &d); //a=4095, b=2000, c=4095, d=0xffff
set_all_bits(&a);
printf("set_all_bits a: %#X\n",a);
status = reset_some_bits(&a, 0x25);
status = printf("reset_some_bits 0x25 %d %#X\n",status, a);
set_all_bits(&a);
printf("set_all_bits a: %#X\n",a);
status = reset_some_bits(&var, b);
printf("reset_some_bits %d %#X %f\n",status, a, var);
status = reset_some_bits( &var, c );
printf("reset_some_bits %d %#X %f\n",status, a, var);
set_all_bits(&var);
status = reset_some_bits(&var, d);
printf("reset_some_bits %d %#X %f\n",status, a, var);
return 0;
}