Spracovani stringu poslaneho do mega8 z PC cez UART – Mikrokontroléry – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Spracovani stringu poslaneho do mega8 z PC cez UART – Mikrokontroléry – Fórum – Programujte.comSpracovani stringu poslaneho do mega8 z PC cez UART – Mikrokontroléry – Fórum – Programujte.com

 

toust
~ Anonymní uživatel
3 příspěvky
14. 11. 2015   #1
-
0
-

čaute borci :) potreboval bych poradit kde robím chybu prosim, C sem sa učil prevažne na PC takže netuším co všetko si možem dovolit pri programovaci pre AVR da to niekde naist? plus kde robím chybu v tomto programe?  

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <string.h>
#include <inttypes.h>
#include "find.h"


unsigned char zisti(char *str)
	{

	unsigned char stav;

	if(('A' == str[0]) & ('A' == str[1]))stav = 1;
	if(('A' == str[0]) & ('B' == str[1]))stav = 2;
	if(('B' == str[0]) & ('A' == str[1]))stav = 3;
	if(('B' == str[0]) & ('B' == str[1]))stav = 4;

	return stav;
}

int8_t strida(char *str)
	{

	int8_t a = 0, b = 0, c = 0, d = 0;
	
	if('1' == str[2])a = 100;
	if('2' == str[2])a = 200;
    else a = 0;

	//if('3' == str[2])a = 300;
	//if('4' == str[2])a = 400;
	//if('5' == str[2])a = 500;
	//if('6' == str[2])a = 600;
	//if('7' == str[2])a = 700;
	//if('8' == str[2])a = 800;
	//if('9' == str[2])a = 900;
	

	if('1' == str[3])b = 10;
	if('2' == str[3])b = 20;
	if('3' == str[3])b = 30;
	if('4' == str[3])b = 40;
	if('5' == str[3])b = 50;
	if('6' == str[3])b = 60;
	if('7' == str[3])b = 70;
	if('8' == str[3])b = 80;
	if('9' == str[3])b = 90;
	if('0' == str[3])b = 0;

	if('0' == str[4])c = 0;
	if('1' == str[4])c = 1;
	if('2' == str[4])c = 2;
	if('3' == str[4])c = 3;
	if('4' == str[4])c = 4;
	if('5' == str[4])c = 5;
	if('6' == str[4])c = 6;
	if('7' == str[4])c = 7;
	if('8' == str[4])c = 8;
	if('9' == str[4])c = 9;

	d = a + b + c;

	if(d > 255)d = 0;

	return d;
	}


Ty zakomentovane časti mi piše že preteka kedže vim že uint8_t ma max 255 ... takže bych mal použit uint16_t ??aj ked použivat procesot atmega8? osmibitovy? potrebujem pri poslani stringu znaku uloženych do pola :

Připojen obrázek.

potrebujem rozoznač či je zadane AA,AB,BA,BB ... a čislo od 0-255 . Dekuju

Nahlásit jako SPAM
IP: 89.103.90.–
KIIV
~ Moderátor
+43
God of flame
14. 11. 2015   #2
-
0
-

Typ uint16_t to samozrejme umi, jen je to trosku pomalejsi nez nativni char.

Trosku nechapu ten slozitej prevod na cislo.. da se to delat i v cyklu

A mimochodem: 

if('1' == str[2]) { a = 100; }
if('2' == str[2]) { a = 200; } else { a = 0; }

bude 100 prepisovat zase nulou

Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
toust
~ Anonymní uživatel
3 příspěvky
14. 11. 2015   #3
-
0
-

Takže bude vyhodnejšíe to spravit len cez unsigned char? a žadny efektivny cyklus mna nenapadel toto je naefektivnejí a fungujuce co mna napadlo.

Nahlásit jako SPAM
IP: 89.103.90.–
KIIV
~ Moderátor
+43
God of flame
14. 11. 2015   #4
-
0
-

#3 toust
zase tak moc pomaly to neni, klidne ten int nebo unsigned int. Dokud tam nezacnes cpat floaty, nebo deleni a zbytky po deleni, tak to pobezi vcelku dobre.

 A cyklus napriklad:

  str += 2;
  uint16_t hodnota = 0;
  while (*str != '\0') {
    hodnota = hodnota*10 + *(str++) - '0'; // jeste muzes pridat kontrolu, jestli je to '0' az '9'
  }
  return hodnota;
Nahlásit jako SPAM
IP: 93.91.152.–
Program vždy dělá to co naprogramujete, ne to co chcete...
some programer
~ Anonymní uživatel
16 příspěvků
22. 11. 2015   #5
-
0
-

#1 toust
Zkus hodně omezit if,používej třeba switch a funkce...Upřímně je to hodně hnusně napsaný.

Nahlásit jako SPAM
IP: 95.82.158.–
toust
~ Anonymní uživatel
3 příspěvky
22. 11. 2015   #6
-
0
-

uprimne povidane nidky sem pro uC neprogramoval anevim jak to vnutri nich presne funguje jak pracovat a pametama ked tam mam EEPROM, FLASH a RAM ... a ked sem programoval pro PC tak if byla moja jedina  volba společne s for..... switch sem nikdy v živote v žadnem projekte nepožil

Nahlásit jako SPAM
IP: 89.103.90.–
23. 11. 2015   #7
-
0
-

~~switch sem nikdy v živote v žadnem projekte nepožil

No potěš koště...

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý