- Crypto Trade
- Call center-forradalom: AI alakítja át az ideges telefonálók hangját
- Otthoni hálózat és internet megosztás
- Windows 10
- Linux kezdőknek
- A tüntetések ellenére is bővítheti német gyárát a Tesla
- Amazon Prime Video
- Hálózati / IP kamera
- Kodi és kiegészítői magyar nyelvű online tartalmakhoz (Linux, Windows)
- Adobe Photoshop
-
IT café
OpenWrt topic
Új hozzászólás Aktív témák
-
Peter789
senior tag
Ugyan picit off, de azért mégis kötődik valamennyire az openwrt-hez és az ar71xx-hez, lévén hogy a carambola2-re próbálok keresztfordítani egy saját C programot - hátha tud valaki segíteni...
A kérdéses programrészlet:
...
// read 4 byte from a register
uint32_t I2C_ReadRegister4(uint8_t reg)
{
uint8_t data[5];
data[0] = reg;
if (write(g_i2cFile, data, 1) != 1) {
perror("I2C_ReadRegister set register");
}
if (read(g_i2cFile, data, 4) != 4) {
perror("I2C_ReadRegister read value");
}
return data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);
}
// read 8 byte from a register
uint64_t I2C_ReadRegister8(uint8_t reg)
{
uint8_t data[9];
data[0] = reg;
if (write(g_i2cFile, data, 1) != 1) {
perror("I2C_ReadRegister set register");
}
if (read(g_i2cFile, data, 8) != 8) {
perror("I2C_ReadRegister read value");
}
return data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24) | (data[4] << 32) | (data[5] << 40) | (data[6] << 48) | (data[7] << 56);
}
...A fordítás sikeres, de közben ezeket a figyelmeztetéseket dobja:
...
i2c_pic.c: In function 'I2C_ReadRegister8':
i2c_pic.c:110:9: warning: left shift count >= width of type [enabled by default]
i2c_pic.c:110:9: warning: left shift count >= width of type [enabled by default]
i2c_pic.c:110:9: warning: left shift count >= width of type [enabled by default]
i2c_pic.c:110:9: warning: left shift count >= width of type [enabled by default]
...Ahol pedig lekérdezem a 8 byte-os regiszterláncot és kiiratom, a 64 bites érték helyett csak egy 32 biteset kapok...
uint64_t RegVal1 = I2C_ReadRegister8(0x00);
printf("%" PRIu64 "\n",RegVal1);Az azonos sémára felépülő I2C_ReadRegister1/2/4 lekérdezések tökéletesen működnek... Tudom hogy maga a proci 32 bites, dehát ettől szoftverből még tudnia kéne kezelni a 64 bites változókat is, nem? Vagy a GCC-t kellene valahogyan paraméterezni hogy támogassa a 64 biteseket is? Vagy lehet kernel szinten van a hiba, azt kellene másképp paraméterezve fordítani?
Az még lemaradt, hogy a linux/i2c-dev.h -t használja a program. Azt tudom hogy az SMBus 4 byte-ra van korlátozva, de szerintem ez nem SMBus-ként kezeli a portot - és még ha így is lenne, akkor is szerintem nem a változó szélességének túllépésére panaszkodna hanem egyszerűen segmentation fault-ba futnék vagy hasonlóba... Magát a buszt a kmod-i2c-gpio adja, az eszköz rajta pedig egy általam írt PIC ami többek között egy DS1307-es RTC-t és egy 24C02 EEPROM-ot emulál külön slave címeken. A két emulált eszköz tökéletesen működik a kmod-rtc-ds1307-el és az at24 kernel modulokkal és magát az I2C kommunikációt kívülről vizsgálva digit analizáló eszközzel látszik hogy a PIC képes akárhány byte-ból álló folyamatos láncolvasásra válaszolni a szoftveres I2C buszon keresztül, tehát ez sem lehet szűk keresztmetszet...
[ Szerkesztve ]
----------------------------------------------------------------------------------------------------------------- AquAgorA ...Pál apostol nyomában: http://fleettracker.eu/index.php/component/aquagora
Új hozzászólás Aktív témák
- Bitdefender Total Security 3év/3eszköz! - "Tökéletes védelem most kedvező áron..."
- World of Warcraft Shadowlands Collectors edition EU EN
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- Játékkulcsok olcsón: Steam, Uplay, GoG, Origin, Xbox, PS stb.
- Microsoft licencek KIVÉTELES ÁRON AZONNAL - UTALÁSSAL IS AUTOMATIKUS KÉZBESÍTÉS - Windows és Office
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Alpha Laptopszerviz Kft.
Város: Pécs