Zdravím už několik dní řeším proč tenhle konkrétní příklad nefunguje. Pokud pošlu zprávu “on” měla by svítit ledka. Když to zadám do přerušení, tak to funguje, ale v hlavním programu nic pokud to nějak nezaobalím.
Založen: Dec 11, 2015 Příspěvky: 191 Bydliště: Slovensko,Bratislava
Zaslal: st květen 08 2024, 19:30 Předmět:
Nearduinista napsal(a):
Zdravím už několik dní řeším proč tenhle konkrétní příklad nefunguje. Pokud pošlu zprávu “on” měla by svítit ledka. Když to zadám do přerušení, tak to funguje, ale v hlavním programu nic pokud to nějak nezaobalím.
Pokud použiji příkaz na porovnávání řetězců strcmp, tak když nechám volatile, překladač dá varování: passing argument 1 of ‘strncmp’ discards qualifiers from pointer target type. A nefunguje to stejně
Zdravím už několik dní řeším proč tenhle konkrétní příklad nefunguje. Pokud pošlu zprávu “on” měla by svítit ledka. Když to zadám do přerušení, tak to funguje, ale v hlavním programu nic pokud to nějak nezaobalím.
Aký reťazec posielaš ak taký "on\r\n" pripadne "on\n\r" tak ? ten poslední znak ty prepíše 'o' na '\0'. skús poslať len "on\r" pripadne "on\n"
Ak posielaš len "on" tak tam chyba ukončovači znak "\0" pre funkciu strcmp()
a dávaj pozor niektoré terminály ty môžu znaky "\r\n" vkladať automaticky
Například takhle už to funguje v pohodě ale proč? Tady defakto jen počkám až se zpráva nahraje celá . A potom vyhodnotím řetězec zda je stejný nebo není. To mě vrtá už několik dnů hlavou.
Založen: Dec 11, 2015 Příspěvky: 191 Bydliště: Slovensko,Bratislava
Zaslal: st květen 08 2024, 20:36 Předmět:
neviem koľko trvá kym sa funkcia strcmp vykoná ale v prvom prípade ju voláš dookola v maine a ako už som písal ak pošleš „on\r\n“ tak sa do bufra uloží zaprava[0] = „o“ a zaprava[1] = „n“ potom „\r“ zaprava[2] = „\0“ vynuluje i=0 a „\n“ do zprava[i=0] kde je uložene „o“ prepíše na „\0“ a ak strcmp tráva dlhšie ako prijatie jedného znaku tak potom to nesedí v druhom prípade spustíš strcmp len raz pravé vtedy keď sprava je korektná.
Naposledy upravil Dumitru dne st květen 08 2024, 20:40, celkově upraveno 1 krát.
Založen: Mar 21, 2006 Příspěvky: 34882 Bydliště: Bratislava
Zaslal: st květen 08 2024, 20:37 Předmět:
V skompilovanom kod mozno ani ziadny strcmp nebude, pretoze kompilator usudi, ze dana podmienka sa nemoze nikdy splnit a pri optimalizacii ho odstrani.
char zprava[16];
int main() {
while (1) {
if (strcmp(zprava,"on") == 0)
printf("AAAAAA\n");
}
}
$ cc test.c -o test
$ strings test | grep strcmp
strcmp
strcmp@GLIBC_2.0
$ cc test.c -O2 -o test
$ strings test | grep strcmp
$
neviem koľko trvá kym sa funkcia strcmp vykoná ale v prvom prípade ju voláš dookola v maine a ako už som písal ak pošleš „on\r\n“ tak sa do bufra uloží zaprava[0] = „o“ a zaprava[1] = „n“ potom „\r“ zaprava[2] = „\0“ vynuluje i=0 a „\n“ do zprava[i=0] kde je uložene „o“ prepíše na „\0“ a ak strcmp tráva dlhšie ako prijatie jedného znaku tak potom to nesedí v druhom prípade spustíš strcmp len raz pravé vtedy keď sprava je korektná.
Tož mě to taky napadlo, tak jsem se to pro zkoušku jal vyřešit takhle. A furt to nejede hm...
kód:
ISR(USART_RX_vect)
{
static int i=0;
prijaty_znak = UDR;
Založen: Dec 11, 2015 Příspěvky: 191 Bydliště: Slovensko,Bratislava
Zaslal: st květen 08 2024, 21:24 Předmět:
Nearduinista napsal(a):
Dumitru napsal(a):
neviem koľko trvá kym sa funkcia strcmp vykoná ale v prvom prípade ju voláš dookola v maine a ako už som písal ak pošleš „on\r\n“ tak sa do bufra uloží zaprava[0] = „o“ a zaprava[1] = „n“ potom „\r“ zaprava[2] = „\0“ vynuluje i=0 a „\n“ do zprava[i=0] kde je uložene „o“ prepíše na „\0“ a ak strcmp tráva dlhšie ako prijatie jedného znaku tak potom to nesedí v druhom prípade spustíš strcmp len raz pravé vtedy keď sprava je korektná.
Tož mě to taky napadlo, tak jsem se to pro zkoušku jal vyřešit takhle. A furt to nejede hm...
kód:
ISR(USART_RX_vect)
{
static int i=0;
prijaty_znak = UDR;
Časy uváděny v GMT + 1 hodina Jdi na stránku 1, 2Další
Strana 1 z 2
Nemůžete odesílat nové téma do tohoto fóra. Nemůžete odpovídat na témata v tomto fóru. Nemůžete upravovat své příspěvky v tomto fóru. Nemůžete mazat své příspěvky v tomto fóru. Nemůžete hlasovat v tomto fóru. Nemůžete připojovat soubory k příspěvkům Můžete stahovat a prohlížet přiložené soubory
Informace na portálu Elektro bastlírny jsou prezentovány za účelem vzdělání čtenářů a rozšíření zájmu o elektroniku. Autoři článků na serveru neberou žádnou zodpovědnost za škody vzniklé těmito zapojeními. Rovněž neberou žádnou odpovědnost za případnou újmu na zdraví vzniklou úrazem elektrickým proudem. Autoři a správci těchto stránek nepřejímají záruku za správnost zveřejněných materiálů. Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva. Použití konstrukcí v rozporu se zákonem je přísně zakázáno. Vzhledem k tomu, že původ předkládaných materiálů nelze žádným způsobem dohledat, nelze je použít pro komerční účely! Tento nekomerční server nemá z uvedených zapojení či konstrukcí žádný zisk. Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ. V případě, že zjistíte porušení autorského práva či jiné nesrovnalosti, kontaktujte administrátory na diskuzním fóru EB.