<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=46&amp;t=20299&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2018-03-02T23:29:22+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=46&amp;t=20299&amp;mode</id>
<entry>
<author><name><![CDATA[krish]]></name></author>
<updated>2018-03-02T23:29:22+01:00</updated>
<published>2018-03-02T23:29:22+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204839#p204839</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204839#p204839"/>
<title type="html"><![CDATA[Re: Jaki typ danych zastosować?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204839#p204839"><![CDATA[
Widzę, że masz cały czas myślenie asemblerowe. <br />W językach &quot;trochę wyższego poziomu&quot; (od asemblera) jakim jest C, to kompilator i jego ustawienia decydują o wielu rzeczach. W tym przypadku jeżeli jest podany rozmiar uint_8 to jeżeli liczba bitów pól przekroczy 8, kompilator doda kolejny bajt typu uint_8 dla np 9 bitu i kolejnych bitów. Opcje kompilacji wymuszą albo wyrównywanie pól bitowych do początku bajtów albo jego brak. <br />Jeżeli byłby podany np.  uint_16, to kompilator zarezerwowałby od początku 2 bajty na strukturę<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2273">krish</a> — 2 mar 2018, o 23:29</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[HomoChemicus]]></name></author>
<updated>2018-03-02T20:12:12+01:00</updated>
<published>2018-03-02T20:12:12+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204826#p204826</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204826#p204826"/>
<title type="html"><![CDATA[Re: Jaki typ danych zastosować?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204826#p204826"><![CDATA[
[syntax=c]struct byte_ERR {<br />        uint8_t E0 : 1;                         //E 1 - Przez czas MCOR nie bylo nowej wart. momentu<br />        uint8_t E1 : 1;                         //E 2 - Brak impulsow w torze P<br />        uint8_t E2 : 1;                         //E 4 - Brak impulsow N lub 3MHz<br />        uint8_t E3 : 5;                         //E 8 - Blednde pomiary<br />} Err;[/syntax]<br /><br />To wywala błąd?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=10470">HomoChemicus</a> — 2 mar 2018, o 20:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bastik]]></name></author>
<updated>2018-03-02T12:05:52+01:00</updated>
<published>2018-03-02T12:05:52+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204805#p204805</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204805#p204805"/>
<title type="html"><![CDATA[Re: Jaki typ danych zastosować?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204805#p204805"><![CDATA[
Znalazłem informację że taki sposób deklarowania zmiennych, pozwala na określenie rozmiaru pola <br /><br />[syntax=c]struct byte_ERR {<br />uint8_t E0 : 1; //E 1 -Przez czas MCOR nie bylo nowej wart. momentu<br />uint8_t E1 : 1; //E 2 -Brak impulsow w torze P<br />uint8_t E2 : 1; //E 4 -Brak impulsow N lub 3MHz<br />uint8_t E3 : 1;  //E 8 -Blednde pomiary<br />uint8_t E4 : 1; //E 16 -Nierealny kat skrecenia<br />uint8_t E5 : 1;  //E 32 -Nieokreslony kat bazowy<br />uint8_t E6 : 1; //E 64 -Nieokreslona stala walka <br />uint8_t E7 : 1; //E 128 -Spadek napiecia<br />} Err;[/syntax]<br /><br />Ale gdy przypiszę np. wartość 5 to kompilator nie pokazuje błędu że przekroczyłem zakres 1 bitu<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8145">bastik</a> — 2 mar 2018, o 12:05</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[rskup]]></name></author>
<updated>2018-02-28T10:34:58+01:00</updated>
<published>2018-02-28T10:34:58+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204684#p204684</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204684#p204684"/>
<title type="html"><![CDATA[Re: Jaki typ danych zastosować?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204684#p204684"><![CDATA[
<div class="quotetitle">bastik napisał(a):</div><div class="quotecontent"><br />a resztę tego typu danych zadeklarować, jako typ logiczny<br /></div>Masz teraz znacznie więcej pamięci RAM niż w starym procku, więc te statusy zdarzeń możesz trzymać jako bajty i nie bawić się ręcznie w bity.<br /><br />-- <br />Pozdrawiam,<br />Robert<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 9 minutach ]</span></strong><br /><br />Może zrobić sobie strukturę ERR i w niej trzymać poszczególne wartości. Będziesz miał porządek i zbliżone do tego co miałeś:<br />[syntax=c]struct {<br />uint8_t E0;<br />uint8_t E1;<br />uint8_t E2;<br />uint8_t E3;<br />uint8_t E4;<br />uint8_t E5;<br />uint8_t E6;<br />uint8_t E7;<br />} TERR;[/syntax]<br /><br />A jak bardzo chcesz mieć statusy na bitach to możesz skorzytać z unii:<br />[syntax=c]typedef union<br />{<br />uint8_t byte;<br />struct<br />{<br />uint8_t bit0 : 1;<br />uint8_t bit1 : 1;<br />uint8_t bit2 : 1;<br />uint8_t bit3 : 1;<br />uint8_t bit4 : 1;<br />uint8_t bit5 : 1;<br />uint8_t bit6 : 1;<br />uint8_t bit7 : 1;<br />};<br />} TBYTE;[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=3427">rskup</a> — 28 lut 2018, o 10:34</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bastik]]></name></author>
<updated>2018-02-25T17:37:09+01:00</updated>
<published>2018-02-25T17:37:09+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204542#p204542</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204542#p204542"/>
<title type="html"><![CDATA[Re: Jaki typ danych zastosować?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204542#p204542"><![CDATA[
W przypadku STM32F103RET6 występuje obszar BitBanding-u, w programie dla starego procka jest dużo &quot;zmiennych&quot; logicznych (o ile dobrze to nazwałem), nie tylko do obsługi zewnętrznego terminala. <br />[syntax=asm]; w bajcie ERR:<br />E0 EQU08H; Przez czas MCOR nie wystapila nowa wartosc<br />E1 EQU09H; Brak impulsow w torze P<br />E2 EQU0AH; Brak impulsow w torze N<br />E3 EQU0BH; Bledne pomiary<br />E4 EQU0CH; Nierealny kat <br />E5 EQU0DH; Nieokreslony kat<br />E6 EQU0EH; Nieokreslona stala <br />E7 EQU0FH; Spadek napiecia[/syntax]<br />Nie będę zamieszczał wszystkiego, bo tego jest dosyć sporo, ale mniej więcej tak to wygląda. Tak jak pisałeś stan tych 8 pinow można obsłużyć przerwaniami, a resztę tego typu danych zadeklarować, jako typ logiczny. Tylko czy to będzie najlepsze rozwiązanie? Napisałem o Bit bandingu, ponieważ szukałem jakiegoś mechanizmu, który da mi dostęp oraz możliwość odczytu i zapisu pojedynczych bitów w bajcie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8145">bastik</a> — 25 lut 2018, o 17:37</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[gizmo5418]]></name></author>
<updated>2018-02-25T09:49:57+01:00</updated>
<published>2018-02-25T09:49:57+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204515#p204515</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204515#p204515"/>
<title type="html"><![CDATA[Re: Jaki typ danych zastosować?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204515#p204515"><![CDATA[
Witaj,<br /><br />Trochę mało danych podałeś. Bitbanding do sprawdzania każdego z pinów to tak nie za bardzo. Nie każdy STM ma obszary BitBanding-u<br /><br />Najlepszym wyjściem jest podpiąć  każdą użytą linię portu pod przerwanie. Każdy pin portu ma osobne swoje przerwanie. W przerwaniu obsługiwać zdarzenie od zmiany stanu na pinie.<br /><br />Można również obsługiwać programowo - rejestr portu jest 32 bitowy, jednak tylko najmłodsze 16 bitów mają informacje o stanie pinów.<br />[syntax=c]#define UP      0b0000000000000001;<br />#define DOWN    0b0000000000000010;<br />#define LEFT    0b0000000000000100;<br /><br />uint16_t terminal;<br /><br />terminal = (uint16_t)GPIOA-&gt;IDR;    // tu przykładowo odczytujemy to co na pinach portu A<br /><br />if ( terminal &amp; UP) obsługa klawisza UP;<br />if ( terminal &amp; DOWN) obsługa klawisza DOWN;<br />....<br />....<br />....[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1967">gizmo5418</a> — 25 lut 2018, o 09:49</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[bastik]]></name></author>
<updated>2018-02-24T23:09:39+01:00</updated>
<published>2018-02-24T23:09:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204499#p204499</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204499#p204499"/>
<title type="html"><![CDATA[Jaki typ danych zastosować?]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=20299&amp;p=204499#p204499"><![CDATA[
Witam<br />Jestem na etapie zamiany starego programu napisanego w asemblerze na nowy napisany w C. Do urządzenia, w którym pracuje mikrokontroler SAB80C535 jest podpinany (dokładnie o wszystkich 8 linii portu 2) zewnętrzny terminal, zasadniczo wszystko opiera się na zasadzie, że jeżeli jakiś guzik jest wciśnięty to wtedy w jakimś bajcie ustaw jeden z bitów np.<br />[syntax=asm]PLUSEQU1BH; Wcisnieto przycisk '+'<br />MINUSEQU1CH; Wcisnieto przycisk '-'[/syntax]<br />Jest też kilka innych funkcji które jako końcowy wynik swojego działania ustawiają lub zerują jakiś bit.<br />Nowy mikrokontrolera (STM32F103RET6) będzie musiał współpracować z tym samym terminalem, więc jednym ze sposobów jest zadeklarowanie danych typu bool, jednak wyczytałem, że istnieje jeszcze coś takiego jak bit banding, dzięki czemu można mieć dostęp do każdego bitu w bajcie (oczywiście w określonym przedziale pamięci) np.<br />[syntax=c]# define PLUS0x40000027// Wcisnieto przycisk '+'<br /># define MINUS 0x40000028   // Wcisnieto przycisk '-'[/syntax]<br />Które rozwiązanie będzie lepsze?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=8145">bastik</a> — 24 lut 2018, o 23:09</p><hr />
]]></content>
</entry>
</feed>