-
GAMEPOD.hu
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
- Magisk
- A franciáknak elege van abból, hogy minden gyerek mobilozik
- Milyen légkondit a lakásba?
- Kaspersky Antivirus és Internet Security Fórum
- Milyen cserélhető objektíves gépet?
- Samsung Galaxy S23 Ultra - non plus ultra
- PlayStation 5
- NVIDIA GeForce RTX 4080 /4080S / 4090 (AD103 / 102)
- Fűnyíró topik
- 3D nyomtatás
- További aktív témák...
- Eredeti Windows, telepítéssel! Digital Doctor Számítógép Szerviz
- World of Warcraft Shadowlands Collectors edition EU EN
- Microsoft licencek KIVÉTELES ÁRON AZONNAL - UTALÁSSAL IS AUTOMATIKUS KÉZBESÍTÉS - Windows és Office
- Bontatlan - BATTLEFIELD 1 Collectors Edition - Játékszoftver nélkül
- PC JÁTÉKOK (OLCSÓ STEAM, EA , UPLAY KULCSOK ÉS SOKMINDEN MÁS IS 100% GARANCIA )
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen