abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    16.8. 01:00 | Komunita

    Debian dnes slaví 32 let. Ian Murdock oznámil vydání "Debian Linux Release" 16. srpna 1993.

    Ladislav Hagara | Komentářů: 15
    15.8. 17:44 | IT novinky

    Policisté zadrželi odsouzeného drogového dealera Tomáše Jiřikovského, který daroval ministerstvu spravedlnosti za tehdejšího ministra Pavla Blažka (ODS) bitcoiny v miliardové hodnotě, a zajistili i darovanou kryproměnu. Zadržení Jiřikovského může být podle ministerstva důležité k rozuzlení kauzy, která vypukla koncem května a vedla ke konci Blažka. Zajištění daru podle úřadu potvrzuje závěry dříve publikovaných právních

    … více »
    Ladislav Hagara | Komentářů: 9
    15.8. 13:44 | IT novinky

    Administrativa amerického prezidenta Donalda Trumpa jedná o možném převzetí podílu ve výrobci čipů Intel. Agentuře Bloomberg to řekly zdroje obeznámené se situací. Akcie Intelu v reakci na tuto zprávu výrazně posílily. Trump minulý týden označil Tana za konfliktní osobu, a to kvůli jeho vazbám na čínské společnosti, čímž vyvolal nejistotu ohledně dlouholetého úsilí Intelu o obrat v hospodaření. Po pondělní schůzce však prezident o šéfovi Intelu hovořil příznivě.

    Ladislav Hagara | Komentářů: 3
    15.8. 05:44 | IT novinky

    Společnost Purism stojící za linuxovými telefony a počítači Librem má nově v nabídce postkvantový šifrátor Librem PQC Encryptor.

    Ladislav Hagara | Komentářů: 10
    14.8. 18:00 | Nová verze

    VirtualBox, tj. multiplatformní virtualizační software, byl vydán v nové verzi 7.2. Přehled novinek v Changelogu. Vypíchnou lze vylepšené GUI.

    Ladislav Hagara | Komentářů: 0
    14.8. 14:11 | IT novinky

    Eric Migicovsky, zakladatel společnosti Pebble, v lednu oznámil, že má v plánu spustit výrobu nových hodinek Pebble s již open source PebbleOS. V březnu spustil předprodej hodinek Pebble Time 2 (tenkrát ještě pod názvem Core Time 2) za 225 dolarů s dodáním v prosinci. Včera představil jejich konečný vzhled (YouTube).

    Ladislav Hagara | Komentářů: 31
    14.8. 12:44 | Zajímavý software

    Byla oznámena nativní podpora protokolu ACME (Automated Certificate Management Environment) ve webovém serveru a reverzní proxy NGINX. Modul nginx-acme je zatím v preview verzi.

    Ladislav Hagara | Komentářů: 1
    14.8. 12:22 | Nová verze

    Vývojáři KDE oznámili vydání balíku aplikací KDE Gear 25.08. Přehled novinek i s náhledy a videi v oficiálním oznámení.

    Ladislav Hagara | Komentářů: 0
    13.8. 11:55 | IT novinky

    Společnost Perplexity AI působící v oblasti umělé inteligence (AI) podala nevyžádanou nabídku na převzetí webového prohlížeče Chrome internetové firmy Google za 34,5 miliardy dolarů (zhruba 723 miliard Kč). Informovala o tom včera agentura Reuters. Upozornila, že výše nabídky výrazně převyšuje hodnotu firmy Perplexity. Společnost Google se podle ní k nabídce zatím nevyjádřila.

    Ladislav Hagara | Komentářů: 5
    13.8. 04:33 | Bezpečnostní upozornění

    Intel vydal 34 upozornění na bezpečnostní chyby ve svých produktech. Současně vydal verzi 20250812 mikrokódů pro své procesory řešící 6 bezpečnostních chyb.

    Ladislav Hagara | Komentářů: 0
    Kolik tabů máte standardně otevřeno ve web prohlížeči?
     (52%)
     (19%)
     (4%)
     (5%)
     (2%)
     (1%)
     (1%)
     (17%)
    Celkem 408 hlasů
     Komentářů: 23, poslední 4.8. 13:01
    Rozcestník

    Dotaz: C - chybné čtení id 1. sensoru

    28.5.2010 17:14 mcuProg
    C - chybné čtení id 1. sensoru
    Přečteno: 354×
    Mám naprogramovaný termostat. Blbne mi ale část kódu, která má za úkol ukládat do eeprom IDčka teplotních sensorů.
    uint8_t search_sensors(void) {
    	uint8_t i;
    	uint8_t id[OW_ROMCODE_SIZE];
    	uint8_t diff;
    	bool akva1, akva2, lednice, mistnost;
    	
    
    	while(1) {
    		//writestr("+4 NACITAM SENZORY");
    		//lfcr();
    
    		m_delay_ms(250);
    
    		nSensors = 0;
    		akva1_id = -1;
    		akva2_id = -1;
    		lednice_id = -1;
    		mistnost_id = -1;
    		for(uint8_t iN = 0; iN<MAXSENSORS; iN++) { // nemá vliv na chování
    			for(uint8_t iN2 = 0; iN2<OW_ROMCODE_SIZE; iN2++) {
    				gSensorIDs[iN][iN2] = 0;
    			}
    		}
    
    
    		for(diff = OW_SEARCH_FIRST; diff != OW_LAST_DEVICE && nSensors < MAXSENSORS; ) {
    			DS18X20_find_sensor( &diff, &id[0] );
    		
    			if( diff == OW_PRESENCE_ERR ) break;
    			if( diff == OW_DATA_ERR ) break;
    
    			akva1 = true;
    			akva2 = true;
    			lednice = true;
    			mistnost = true;
    
    			for (i=0;i<OW_ROMCODE_SIZE;i++) {
    				gSensorIDs[nSensors][i]=id[i];
    
    				if(akva1) {
    					eeprom_busy_wait();
    					if( gSensorIDs[nSensors][i] != eeprom_read_byte((uint8_t*)(EEPROM_AKVA1_SENSOR+i)) ) akva1 = false;
    				}
    
    				if(akva2) {
    					eeprom_busy_wait();
    					if( gSensorIDs[nSensors][i] != eeprom_read_byte((uint8_t*)(EEPROM_AKVA2_SENSOR+i)) ) akva2 = false;
    				}
    
    				if(lednice) {
    					eeprom_busy_wait();
    					if( gSensorIDs[nSensors][i] != eeprom_read_byte((uint8_t*)(EEPROM_LEDNICE_SENSOR+i)) ) lednice = false;
    				}
    
    				if(mistnost) {
    					eeprom_busy_wait();
    					if( gSensorIDs[nSensors][i] != eeprom_read_byte((uint8_t*)(EEPROM_MISTNOST_SENSOR+i)) ) mistnost = false;
    				}
    			}
    
    			if(akva1 && !akva2 && !lednice && !mistnost) {
    				akva1_id = nSensors;
    				leds_add(port_led_akva1);
    			}
    			if(!akva1 && akva2 && !lednice && !mistnost) {
    				akva2_id = nSensors;
    				leds_add(port_led_akva2);
    			}
    			if(!akva1 && !akva2 && lednice && !mistnost) {
    				lednice_id = nSensors;
    				leds_add(port_led_lednice);
    			}
    			if(!akva1 && !akva2 && !lednice && mistnost) {
    				mistnost_id = nSensors;
    			}		
    			nSensors++;
    		}
    	
    		if( nSensors ) return nSensors;
    
    		leds_search();
    
    		leds_blink(LED_BLINK_FAST_INTERVAL);
    
    		m_delay_s(1);
    	}
    }
    
    void vypsat_senzory() {
    	nSensors = search_sensors();
    
    	for ( int i=0; i<nSensors; i++ ) {
    		writestr("#");
    		writestr_integer((int) i);
    		if(i == akva1_id)
    			writestr(":AKVA1:");
    		if(i == akva2_id)
    			writestr(":AKVA2:");
    		if(i == lednice_id)
    			writestr(":LEDNICE:");
    		if(i == mistnost_id)
    			writestr(":MISTNOST:");
    		writestr(" ");
    		writetemp(getTemp(i));
    		lfcr();
    	}
    }
    
    void uloz_senzor( uint8_t *id, uint8_t kam ) {
    	for (int i=0; i<OW_ROMCODE_SIZE; i++) {
    		eeprom_busy_wait();
    		eeprom_write_byte((uint8_t*)(kam+i),id[i]);
    	}
    }
    
    void nastav_senzor(char cilselekt) {
    	uint8_t sensT = (uint8_t)(rx_buffer[0]-48);
    	writestr_integer((int) sensT); lfcr();
    	if ( sensT < nSensors ) {
    		if(cilselekt == '1')
    			uloz_senzor(&gSensorIDs[sensT][0], EEPROM_AKVA1_SENSOR);
    		else if(cilselekt == '2')
    			uloz_senzor(&gSensorIDs[sensT][0], EEPROM_AKVA2_SENSOR);
    		else if(cilselekt == 'l')
    			uloz_senzor(&gSensorIDs[sensT][0], EEPROM_LEDNICE_SENSOR);
    		else if(cilselekt == 'm')
    			uloz_senzor(&gSensorIDs[sensT][0], EEPROM_MISTNOST_SENSOR);
    		else errorWrite(1);
    		writestr("+1 OK");
    		lfcr();
    		nSensors = search_sensors();
    		vypsat_senzory();
    	}
    	else
    		errorWrite(1);
    }
    
    void eeprog_vstup_podprogram() {
    	if(citac_ee > 0) {
    		for (uint8_t i=RX_BUFFER_SIZE; i>0; i--) rx_buffer[i]=0;
    		rs232enter=0;
    		rs232ready=true;
    		while(1) {
    			if(rs232enter) {
    				rs232ready=false;
    				if(cmdtest('L','S',0))
    					vypsat_senzory();
    				else if(cmdtest('S','A',1))
    					nastav_senzor('1');
    				else if(cmdtest('S','B',1))
    					nastav_senzor('2');
    				else if(cmdtest('S','L',1))
    					nastav_senzor('l');
    				else if(cmdtest('S','M',1))
    					nastav_senzor('m');
    				else if(cmdtest('E','Q',0)) {
    					writestr("+1 OK"); lfcr();
    					break;
    				}
    				else
    					errorWrite(3);
    				for (uint8_t i=RX_BUFFER_SIZE; i>0; i--) rx_buffer[i]=0;
    				rs232enter=0;
    				rs232ready=true;
    			}
    		}
    	}
    	else
    		errorWrite(4);
    }
    
    
    Samotné search_sensors(void) funguje dobře, opravdu porovnává všechny bajty identifikace senzoru vs. uložená identifikace v eeprom. Problém nastává, pokud chci uložit nový senzor. Všechny se ukládají dobře, kromě 1.(senzor #0). Pokud se jednoduše snažím uložit senzor 0 jako cokoliv, tak je první bajt vždy 0x00. Takhle vypadá část eepromky: 00FBFA97020000A728D6F797020000B72820BA9702000072. Správně ale má být 28FBFA97020000A728D6F797020000B72820BA9702000072. Co mám špatně?

    Řešení dotazu:


    Odpovědi

    28.5.2010 21:29 mcuProg
    Rozbalit Rozbalit vše Re: C - chybné čtení id 1. sensoru
    Uz jsem to nasel, asi bych nemel jen tak bezhlave kopirovat :[ for (uint8_t i=RX_BUFFER_SIZE; i>0; i--) se dostane mimo pole
    30.5.2010 12:19 tom
    Rozbalit Rozbalit vše Re: C - chybné čtení id 1. sensoru
    Doporucuju cykly pres pole psat se sizeof jako napr. for (uint8_t i = sizeof id - 1; i>=0; i--)

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.