- Három oldalról üveggel határolt minitorony huppant le az Antec tervezőasztaláról
- Milyen monitort vegyek?
- Házimozi belépő szinten
- Xiaomi Pad 5 - hatásos érkezés
- Ventilátorok - Ház, CPU (borda, radiátor), VGA
- Androidos tablet topic
- Nvidia GPU-k jövője - amit tudni vélünk
- Milyen TV-t vegyek?
- Házimozi haladó szinten
- Gaming notebook topik
Új hozzászólás Aktív témák
-
don_peter
senior tag
Ezt a függvényt szeretném egyszerűsíteni:
A lényege, hogy kap egy karaktert és egy irany változót.
Ha az irany = 0, akkor balról-jobbra vagy is normálisan írja ki a karaktert, de ha az irany = 1, akkor jobbról-balra írja ki a karaktert.
Így:
.....
oooo.
o...o
oooo.
o...o
o...o
oooo.
.....
.oooo
o...o
.oooo
o...o
o...o
.ooooA kód:
void karakter(unsigned char karakter, unsigned char irany){
unsigned char i, mask;
for(i=0; i<7; i++){
if(irany == '1'){
for(mask=0x01; mask != 0x20; mask <<= 1){
if (ABC[karakter][i] & mask){
printf("o");
}else{
printf(".");
}
}
}else{
for(mask=0x10; mask != 0; mask >>= 1){
if (ABC[karakter][i] & mask){
printf("o");
}else{
printf(".");
}
}
}
printf("\n");
}
}Előre is köszi...
[ Szerkesztve ]
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
moseras
tag
válasz don_peter #4852 üzenetére
Üdv!
Talán egyszerűbb:
void karakter(unsigned char karakter, unsigned char irany){
unsigned char i;
unsigned char normal = (irany == '0');
unsigned char mask_end = normal ? 0 : 0x20;
unsigned char mask;
for(i=0; i<7; i++){
mask = normal ? 0x10 : 0x01;
while (mask != mask_end) {
if (ABC[karakter][i] & mask){
printf("o");
}else{
printf(".");
}
if(normal) {
mask >>= 1;
} else {
mask <<= 1;
}
}
printf("\n");
}
}Imi.
-
don_peter
senior tag
Ismét elakadtam, kérném segítségeteket.
Van egy rohadt nagy tömböm ami így néz ki://A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 - : .
static unsigned char ABC[40][7] ={{0b00000,//A
0b01110,
0b10001,
0b10001,
0b11111,
0b10001,
0b10001},
{0b00000,//B
0b11110,
0b10001,
0b11110,
0b10001,
0b10001,
0b11110}, ...};P18F684-es chip-el dolgozom aminek csak 128byte adatmemóriája van.
A kérdésem az lenne, hogy van e mód egy 280byte-os területű tömb használatára?
Vagy, ha ennek esélye nem sok, milyen módon tudnám kikerülni, hogy ne foglaljon le ekkora területet?
Vagy egy hatékonyabb megoldás elmélete is érdekelhet.
Most egy switch() elágazással oldottam meg, de ez véleményem szerint nem hatékony, nem mellesleg zabálja a program memóriát.
Előre is köszi..----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
moseras
tag
válasz don_peter #4855 üzenetére
Üdv!
Ha
static const unsigned char ABC[40][7]
írsz, akkor (legalábbis régebben így volt) a FLASH-be, vagyis a program memóriába teszi a tömböt. Tehát fontos a const módosító. Mivel ezt te csak olvasod, ezért neked ez így megfelelő. Bár nem tudom, hogy milyen C fordítót használsz, de a Microchip PIC18-as fordítója régebben const módosító esetén a FLASH-be tette.
Imi.
[ Szerkesztve ]
-
don_peter
senior tag
-
don_peter
senior tag
válasz moseras #4858 üzenetére
Az új programmal már kicsit dinamikusabban lehet állítgatni a kiírandó szövegeket
Videó róla: DPTP System - WandClock 3----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
don_peter
senior tag
válasz moseras #4860 üzenetére
A printf() nem használható PIC (mikrokontroller) programozásnál kivéve, ha LCD-re akarok kiírni valamit.
Mos a printf() helyett a PIC egyes portjaira és azon belül egyes bit-jeire küldöm ki az utasítást.
Tehát a printf() helyett ez van:
LED1 = ABC[karakter][6]>>mask;
LED2 = ABC[karakter][5]>>mask;
...stb[ Szerkesztve ]
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
don_peter
senior tag
válasz moseras #4862 üzenetére
Nem igazán értem a kérdésed, de megpróbálok következtetni és, ha nem jó akkor újból rákérdezel.
Az RS232 az ügye a soros port.
PIC mikrovezérlőknél ezt SPI (serial peripheral interface) porton keresztül érhetjük el amelyre 1byte-os adatcsomagokba küldhetünk és fogadhatunk adatokat.
A printf() utasítás itt sem játszik. (PIC-nél legalább is erre külön rutint kell írni)----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
moseras
tag
válasz don_peter #4863 üzenetére
Üdv!
Szerintem RS232 != SPI. Van olyan, hogy HW-es RS232, HW-es SPI, HW-es I2C, HW-es CAN, stb., de ezek egymástól függetlenek. Típustól függően vagy ez, vagy az, vagy akár mind a 4 is lehet egy kontrollerben. Sőt, akár több RS232 és/vagy SPI is lehet egy-egy kontrollerben (persze itt a nagyobbakra gondolok). Szóval szerintem az RS232 teljesen független az SPI-től. Pl. a te kontrolleredben nincs RS232, de van benne 1 SPI és 1 I2C. De pl. a PIC16F1704-ben már van 1 db RS232.
Lassan offtopic leszek...
Imi.
-
buherton
őstag
válasz don_peter #4861 üzenetére
Egyes fordítók támogatják a stream-ek redefiniálását. Az avr-gcc-ben pl. pont soros porti küldésre használom a printf-et.
tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
buherton
őstag
válasz don_peter #4863 üzenetére
Az RS232 aszinkron, az SPI szinkron ráadásul az előbbinél működik az egy irányú kommunikáció az utóbbinál kétirányú forgalom kötelező. Amire te gondolsz azaz UART, USART vagy USI. Lábnevek: Rx és Tx. Mint már fentebb írtam, hogy a stream redefiniálással lehet ügyködni, ha támogatja a fordító, és pont alkalmazható, mert a C ASCII alapú, ami 1 byte széles, és a soros porttól kezdve, minden periféria byte alapú.
tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
buherton
őstag
válasz don_peter #4867 üzenetére
Íme. Kipróbálás rád marad, mert nekem nincs mega felszerelésem. Viszont készülj fel, hogy ezek általában sok flasht igénylő műveletek.
tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
don_peter
senior tag
válasz buherton #4869 üzenetére
Úgy nézem, hogy az LCD vezérlés pont így működik.
Nem kevés sort kell hozzá legépelni
Egyelőre nincs rá szükségem így addig nem is feszegetem a témát.
Csak ésszel adagolom magamnak a dolgot, hogy legyen friss hely és, hogy meg is maradjon az agyamba
Köszi a feltárást és a kiigazítást.----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
zka67
őstag
Sziasztok, egy kis segítségre lenne szükségem:
C-ben hogyan tudom azt megoldani, hogy egy 8 bites tömb elemeit tudjam írni és olvasni 16 bitesként is?
Valami ilyesmire gondoltam, csak ez nem működik, bár a fordító nem jelez hibát:
uint8_t zreg[8];
#define C zreg[0]
#define B zreg[1]
#define BC (uint16_t)zreg[0]
...
BC += 1;A segítségeteket előre is köszönöm!
-
moseras
tag
Üdv!
uint8_t zreg[8] = {0,0,0,0,0,0,0,0};
#define C zreg[0]
#define B zreg[1]
#define E zreg[2]
#define D zreg[3]
#define BC (uint16_t*)&zreg[0]
#define DE (uint16_t*)&zreg[2]
int main(int argc, char**argv)
{
int i;
*BC += 852;
*DE += 4500;
printf("BC: %d, DE: %d\n", *BC, *DE);
printf("zreg: ");
for (i = 0; i < 8; ++i) {
printf("%d ", (int)zreg[i]);
}
printf("\n");return 0;
}Eredmény:
$ gcc -o 1.exe 1.c; 1.exe
BC: 852, DE: 4500
zreg: 84 3 148 17 0 0 0 0Imi.
[ Szerkesztve ]
-
buherton
őstag
válasz moseras #4872 üzenetére
Ahogy írtad úgy nem fordul. Így a helyes gcc asd.c; ./a.out (-o kapcsoló nem kell, csak ha saját nevet akarsz a binárisnak adni), de előtte az a.out-ra kell egy executable bitet rakni a usernek.
tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
moseras
tag
válasz buherton #4874 üzenetére
Üdv!
MinGW/msys/Windows alatt működik. Az nem volt benne a kérdésben, hogy milyen rendszer alatt akarja futtatni, lehet mikrokontroller, Windows, Linux, Mac, BSD, akármi más. Egyébként is csak a a kimenet demonstrálása miatt írtam le, hogy mit ír ki, nem a fordítás menetét akartam megmutatni. Szerintem Ő van annyira képben, hogy le tudja fordítani az adott rendszerére a programot. Ha nem, akkor majd szól.
Imi.
-
Jester01
veterán
-
moseras
tag
-
axioma
veterán
válasz moseras #4878 üzenetére
En ugy gondoltam, hogy az union az tartalmaz egy uint8_t[8]-t es egy olyan strukturat, amiben benne van a 16 bites BC es DE (ha annyira kell mukodjon, mint te irtal), vagy eleve egy uint16_t[4] es akkor mindet eleri, es annak a BC, DE-re valo define-ja se lenne vallalhatatlan kavaras. Es pl. a bytetombot az eredeti indexelessel hasznalhatja, mig az egyesevel union eseten duplan kell (hanyadik strukt hanyadik - 0 v. 1 - byte-ja).
[ Szerkesztve ]
-
buherton
őstag
válasz moseras #4875 üzenetére
Felhívnám a figyelmedet erre: . Szarkasztikus kötekedést próbáltam jelezni ezzel, de úgy látom sikertelenül. No de, hogy tényleg kötekedjek, legközelebb $ helyett > használj, mert az előbbi az általánosab elfogadott user prompt jele Unix rendszereken. (hát ha most már érthetőbb )
tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
buherton
őstag
válasz moseras #4878 üzenetére
Ez sajnos nem játszik, mert az uint8_t valójában 16 bitet "foglal" ki, amit csak #pragma-val vagy attribute-al lehet alignolni 8 bitre. Ezt viszont nem szarkazmusból mondom, mert a jó múltkorában ez okozott komoly fejfájást a 32 bites PowerPC-n.MOD: Tömb... Áh, a fene este van, és azt hiszem inkább csöndben maradok.
[ Szerkesztve ]
tely, baly, fojó, mennyél, mingyárt, telyföl, tolyás, malyd, kapú, egyenlőre, ejsd, jáccani, ahoz, fúj, hüje, muszály, alat, álok, lasan, fojtatás, ál, fontós, költsön, eggyüt, lyob (jobb?), mek, mongyak, milyért - !!! Tanúlyunk már meghejjessen irni... !!!
-
don_peter
senior tag
Srácok, készítettem egy kék LED-es változatot az új programmal amelyben a segítségeteket kértem.
DPTP System - HandText Blue
Jó szuperál az új program, sokkal hatékonyabb és gyorsabb mint az első változat.
Itt már jól láthatóan elkülönülnek a LED-ek egymástól nem úgy mint az elsőnél.
Pixelesebb.Itt két kép az összehasonlítás kedvéért:
Az első változat:
És a mostani új hatékonyabb és gyorsabb változat:
[ Szerkesztve ]
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
don_peter
senior tag
Rólam és a C nyelvről illetve egy kütyümről. Cikk
Gondoltam érdekelhet titeket is
Tisztelettel és jó szível ajánlom.----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
don_peter
senior tag
Újabb cikkem amit tisztelettel ajánlok mindenikek.
Amikor a hardver és a szoftver találkozik 2. rész - DPTP System - HandText[ Szerkesztve ]
----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
#68216320
törölt tag
Alap problémám akadt. Ékezetes karaktereket szeretnék bevinni és kiírni. Az alábbi leegyszerűsített kódal próbáltam, de az 'á' betűvel kezdődő szavakból lemarad az első betű. pl. állomás -> llomás. Az 'ékezet' szót kiírja hiba nélkül. Mit szúrok el?
#include <wchar.h>
int main()
{
wchar_t string [40];
wscanf(L"%ls",string);
wprintf(L"String: %ls", string);
return 0;
} -
anddrew
tag
érdemes megtanulni a c programozást könyvből?
π
-
zka67
őstag
Sziasztok, ismét elakadtam, így megint a segítségeteket kérem:
Nem tudom megoldani azt, hogy csak akkor olvasson be egy karaktert az stdin-ről, ha van karakter, magyarul ne várjon a karakterre, ha nincs.
while (1) {
if (checkInput()) doInput();
if (checkTimer()) doTimer();
}Itt a checkInput() a kérdéses, fogalmam sincs, hogy oldjam meg, hogy jelezze, ha van karakter az stdin-ben.
A segítségeteket előre is köszönöm.
-
#68216320
törölt tag
válasz Jester01 #4890 üzenetére
Meghívtam, de az volt a gond akkor, hogy kiírni a forrásból jól tudtam, de a beolvasáskor elvesztek az ékezetek.
A végső, de eléggé csúnya megoldás forrását feltettem ide.
Ezzel a beolvasás billentyűzetről hibátlan, de a kiirás forráskódból hibás volna. Viszont egy függvénnyel konvertálom az ékezeteket és ezzel kiirni is tudok rendesen. Valahogy nem sikerül egyszerűen a kiirás-beolvasás konvertálás nélkül.
Fura volt továbbá, hogy pl. az swprintf(szoveg,L"állomás"); nem tartalmazhatott ékezetet, csak akkor, ha utf8 volt a forrásfájl tárolása. Viszont ekkor macerássá váltak újra a karakterek, mindent wprintf()-el tudtam csak kiirni. A beolvasás viszont hibássá vált.
[ Szerkesztve ]
-
Karma
félisten
Nem próbáltam, de szerintem ez működhet.
Stdinen semmi se biztos mondjuk.Nyilván hülyeséget írtam, a getc alaphelyzetben blokkol, ha nem tud karaktert olvasni; ezt felülbírálni meg nem lehet platformfüggetlenül...
[ Szerkesztve ]
“All nothings are not equal.”
-
don_peter
senior tag
válasz Ereshkigal #4889 üzenetére
Szívből ajánlom:
Stephen G Kochan - Programfejlesztés C nyelvenVannak benne leckék is.
Én ezt végigolvastam és a példa programokat is begépeltem amelyek sokban segítenek a megértésben.----== Neo Geo és Arcade Fórum : www.neo-geo.hu ==----
-
Jester01
veterán
válasz #68216320 #4894 üzenetére
A forrásfájl kódolása tetszőleges lehet és független a futásidejű kódolástól. Az aktuális locale beállításból jön, alapértelmezése pedig utf8. Persze meg is lehet adni a fordítónak, gcc esetén a -finput-charset kapcsolóval.
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
int main()
{
const wchar_t* text = L"árvíztűrő tükörfúrógép";
wchar_t buf[40];
setlocale(LC_ALL, "");
wprintf(L"Írd be, hogy %ls: ", text);
fgetws(buf, 40, stdin);
buf[wcslen(buf) - 1] = 0;
wprintf(L"Ezt írtad be: \"%ls\", %ls\n", buf,
wcscmp(text, buf) ? L"nem egyezik" : L"egyezik");
return 0;
}$ file test-utf8.c
test-utf8.c: C source, UTF-8 Unicode text
$ gcc -finput-charset=utf8 test-utf8.c
$ ./a.out
Írd be, hogy árvíztűrő tükörfúrógép: árvíztűrő tükörfúrógép
Ezt írtad be: "árvíztűrő tükörfúrógép", egyezik
$ iconv -f utf8 -t iso8859-2 < test-utf8.c > test-latin2.c
$ gcc -finput-charset=iso8859-2 test-latin2.c
$ ./a.out
Írd be, hogy árvíztűrő tükörfúrógép: árvíztűrő tükörfúrógép
Ezt írtad be: "árvíztűrő tükörfúrógép", egyezikMégegyszer, röviden: a forrás tetszőleges kódlappal lehet, ha azt megmondod a fordítónak. Futásidőben pedig a setlocale megfelelő használata szükséges. Ennyi.
Jester
-
#68216320
törölt tag
Új hozzászólás Aktív témák
Hirdetés
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Három oldalról üveggel határolt minitorony huppant le az Antec tervezőasztaláról
- Víz- gáz- és fűtésszerelés
- Milyen monitort vegyek?
- Házimozi belépő szinten
- Okos Otthon / Smart Home
- BestBuy topik
- Call of Duty: Black Ops 6
- Xiaomi Pad 5 - hatásos érkezés
- Hardcore pizza és kenyér topik
- Ventilátorok - Ház, CPU (borda, radiátor), VGA
- További aktív témák...
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest