• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Błąd podczas kompilacji programu

Object Storage Arubacloud
0 głosów
398 wizyt
pytanie zadane 18 sierpnia 2019 w C i C++ przez Mavimix Dyskutant (8,390 p.)

Mam kod, który komunikuje się z mikrokontrolerem. Potrzebuję użyć zmiennej typu string. Kod:

#define 	F_CPU   8000000UL

#include <avr/io.h>
#include <stdlib.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <string>

void init_com(int hz)
{
	UBRRL = hz;  //predkosc 19200 uart
	UCSRB =_BV(TXEN)|_BV(RXEN)|_BV(RXCIE);
	UCSRC |= (1<<URSEL)|(3<<UCSZ0);
}

void print_char(char znak)
{
	_delay_loop_2(15000);
	if(bit_is_set(UCSRA,UDRE))
	{
		UDR=znak;
		loop_until_bit_is_set(UCSRA,TXC);
	}
}

void print_text(char * text)
{
    while(*text)
        print_char(*text++);
}

char *from[64];
int licznik = 0;
int check = 0;
int liczba[64];

int main(void)
{
	init_com(25);
	sei();

	while(1)
	{
		print_text("Hello World!!!");

		check = 1;
		from[0] = '3';

		if(check>=1)
		{
			/*for(int i = 0; i<=licznik; i++)
			{
				liczba[i] = atoi(from[i]);
			}
			UDR=0x0D;
			UDR=0x0A;*/

			//liczba[0] = atoi(from[0]);

			//liczba[0] *= 3;

			//char Temp[8];
				//itoa(liczba[0], Temp, 10);

			string ok = "ala ma kota";

			while(1)
			{
				print_text(ok);
			}
		}

		UDR=0x0D;
		UDR=0x0A;
	}
}

SIGNAL(USART_RXC_vect)
{
	check++;

	while(bit_is_set(UCSRA,RXC))
	{
		from[licznik] = UDR;
		licznik++;
	}
}

Podczas kompilacji wyskakuje mi taki błąd:

linia 8:

"Multiple markers at this line
    - Unresolved inclusion: 
     <string>
    - string: No such file or 
     directory"

 

reszta błędów wynika z problemu zainkludowania biblioteki. Używam kompilatora do avr, środowisko to Eclipse. Co zrobić, aby używać zmiennych typu string - jak poprawnie zainkludować bibliotekę?

2 odpowiedzi

+2 głosów
odpowiedź 18 sierpnia 2019 przez mokrowski Mędrzec (155,460 p.)
wybrane 18 sierpnia 2019 przez Mavimix
 
Najlepsza
Programujesz w C. W nim jest dostępny nagłówek <string.h>.

PS. Makra F_CPU nie umieszcza się w kodzie a jedynie w wywołaniach kompilatora. Stosujesz także przestarzałe oznaczanie przerwań dla AVR.
komentarz 18 sierpnia 2019 przez Mavimix Dyskutant (8,390 p.)
Jakie są "nowe" oznaczenia?
komentarz 18 sierpnia 2019 przez adrian17 Ekspert (344,860 p.)
komentarz 18 sierpnia 2019 przez Mavimix Dyskutant (8,390 p.)
Dzięki. A z tym F_CPU o co dokładnie chodzi?
komentarz 18 sierpnia 2019 przez adrian17 Ekspert (344,860 p.)
Idealnie gdyby dodać to do opcji kompilatora, żeby automatycznie definiował to w każdym pliku - jest to bezpieczniejsze niż pilnowanie się żeby samemu to robić.

Natomiast to jak Ty to robisz zadziała, po prostu są lepsze sposoby.
komentarz 18 sierpnia 2019 przez mokrowski Mędrzec (155,460 p.)
W opcjach projektu w Eclipse, wybierasz taktowanie zegara dla całego projektu. Umieszczanie w każdym pliku makra jest uciążliwe i "błędogenne".
komentarz 18 sierpnia 2019 przez Mavimix Dyskutant (8,390 p.)
Super, dzięki.
–3 głosów
odpowiedź 18 sierpnia 2019 przez Wraith Gaduła (4,370 p.)

Kompilator wie gdzie co jest ale Eclipse nie wie. wejdz w Uwstawienia eclipse Properities zakladka C/C++  i Path and SYmbols i tam musisz dodac nazwe do pliku biblioteki stdio

komentarz 18 sierpnia 2019 przez mokrowski Mędrzec (155,460 p.)
Z całą pewnością nie.
komentarz 18 sierpnia 2019 przez Mavimix Dyskutant (8,390 p.)
Dlaczego nie? To jak zrobić żeby było dobrze
komentarz 18 sierpnia 2019 przez mokrowski Mędrzec (155,460 p.)
Kompilator "widzi" bibliotekę standardową. Problem leży w złej definicji nagłówka o czym świadczy komunikat błędu.

Podobne pytania

0 głosów
0 odpowiedzi 350 wizyt
0 głosów
3 odpowiedzi 2,038 wizyt
pytanie zadane 11 października 2015 w Python przez Wartownik Obywatel (1,990 p.)
0 głosów
4 odpowiedzi 8,504 wizyt
pytanie zadane 18 października 2016 w C i C++ przez MarioMZ Nowicjusz (170 p.)

92,537 zapytań

141,377 odpowiedzi

319,456 komentarzy

61,922 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...