abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 02:44 | Nová verze

    Emulátory Box86 a Box64 umožňující spouštět linuxové aplikace pro x86 a x86_64 na jiných než x86 a x86_64 architekturách, například ARM a ARM64, byly vydány v nových verzích: Box86 0.3.8 a Box64 0.3.2. Ukázka možností na YouTube.

    Ladislav Hagara | Komentářů: 0
    včera 20:55 | Nová verze

    Byla vydána nová verze 6.1 neměnné (immutable) distribuce openSUSE Leap Micro určené pro běh kontejneru a virtuálních strojů. S vydáním verze 6.1 byla ukončena podpora verze 5.5.

    Ladislav Hagara | Komentářů: 0
    včera 19:55 | IT novinky

    Poslanci dnes ve třetím čtení schválili návrh zákona o digitálních financích. Cílem zákona je implementace předpisů Evropské unie v oblasti digitálních financí, konkrétně nařízení DORA (Digital Operational Resilience Act) o digitální provozní odolnosti finančního sektoru a nařízení MiCA (Markets in Crypto Assets) o trzích kryptoaktiv. Zákon nyní míří k projednání do Senátu ČR. U kryptoměn bude příjem do 100 tisíc Kč za zdaňovací období osvobozen od daně, podobně jako u cenných papírů, a to za podmínky jejich držení po dobu alespoň 3 let.

    Ladislav Hagara | Komentářů: 3
    včera 19:11 | Komunita

    O víkendu (15:00 až 23:00) proběhne EmacsConf 2024, tj. online konference vývojářů a uživatelů editoru GNU Emacs. Sledovat ji bude možné na stránkách konference. Záznamy budou k dispozici přímo z programu.

    Ladislav Hagara | Komentářů: 0
    včera 10:22 | Nová verze

    Mozilla má nové logo a vizuální identitu. Profesionální. Vytvořeno u Jones Knowles Ritchie (JKR). Na dalších 25 let.

    Ladislav Hagara | Komentářů: 22
    5.12. 23:33 | Komunita

    Bylo rozhodnuto, že nejnovější Linux 6.12 je jádrem s prodlouženou upstream podporou (LTS). Ta je aktuálně plánována do prosince 2026. LTS jader je aktuálně šest: 5.4, 5.10, 5.15, 6.1, 6.6 a 6.12.

    Ladislav Hagara | Komentářů: 0
    5.12. 15:11 | Nová verze

    Byla vydána nová stabilní verze 3.21.0, tj. první z nové řady 3.21, minimalistické linuxové distribuce zaměřené na bezpečnost Alpine Linux (Wikipedie) postavené na standardní knihovně jazyka C musl libc a BusyBoxu. Z novinek lze vypíchnou počáteční podporu architektury Loongson LoongArch64.

    Ladislav Hagara | Komentářů: 0
    5.12. 11:33 | IT novinky

    Mapy.cz Premium stojí 249 korun ročně. Premium verze je zaváděna postupně.

    Ladislav Hagara | Komentářů: 30
    5.12. 11:00 | IT novinky

    Hodnota Bitcoinu, decentralizované kryptoměny překonala 100 000 dolarů (2 390 000 korun).

    JZD | Komentářů: 16
    5.12. 05:11 | Zajímavý software

    Hurl byl vydán ve verzi 6.0.0. Hurl je nástroj běžící v příkazovém řádku, který spouští HTTP požadavky definované v textovém souboru.

    Ladislav Hagara | Komentářů: 0
    Rozcestník

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

    28.5.2010 17:14 mcuProg
    C - chybné čtení id 1. sensoru
    Přečteno: 343×
    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.