Uit opbouw van een UART Frame leiden we volgende configuratie mogelijkheden af:
Vaak voorkomende waarden
#define BAUDRATE 9600
#define BUADVAL (F_CPU / 8 / BAUDRATE - 1) / 2
char ReceivedByte ;
void setup() {
UCSR0B = (1 << RXEN0 ) | (1 << TXEN0 );
UCSR0C = (1 << UCSZ00 ) | (1 << UCSZ01 );
UBRR0H = ( BUADVAL >> 8) ;
UBRR0L = BUADVAL;
}
void loop() {
// put your main code here, to run repeatedly:
while ( UCSR0A & (1 << RXC0));
ReceivedByte = UDR0 ;
while (UCSR0A & (1 << UDRE0));
UDR0 = ReceivedByte ;
}
Een pointer is een variabele dat een geheugen locatie bevat van andere elementen in de code. Een pointer de adressen van volgende elementen bevatten
Geheugen is adresseerbare blok bits!
int number = 10;
int *pointer = &number;
Je wijst een adres toe aan een pointer
Declaratie | Value | Adres |
int Val = 2 | 2 | 54428 |
int *pVal = &Val | 54428 | 97880 |
int secVal = *pVal | 2 | 97932 |
*pVal = 5 | 5 | 54428 |
pVal = pVal + 1 | 54444 (+16) | 97880 |
Veronderstel dat
void swap(int x, int y){
int tmp;
tmp = x
x = y;
y = tmp;
}
void main(void){
int a = 10;
int b = 13;
swap (a, b);
}
/*y == ? && z == ?*/
void swap(int *x, int *y){
int tmp;
tmp = *x
*x = *y;
*y = tmp;
}
void main(void){
int a = 10;
int b = 13;
swap (&a, &b);
}
/*y == ? && z == ?*/
int *p
int a[1O]
p = &(a[2]);
/*Dan klopt het volgende*/
*p = a[2];
*(p+ 1) = a[3];
int a[1O]
int *p = &(a[0]);
int i = a[11] //error
int j = *(p + 15) //mogelijk
nt strlen(char *s) /* added by RJH; source: K&R p99 */
{
int n;
for(n = 0; *s != '\0'; s++)
{
n++;
}
return n;
}
void RF24::read(void *buf, uint8_t len)
bool RF24::write(const void *buf, uint8_t len)
int data[10]="Hello World"
for (int i = 0; i < sizeof(data)/sizof(int); i++){
//dosomething
}
int data[10]="Hello World"
write(data, sizeof(data));