<?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=30&amp;t=3306&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-06-11T22:43:42+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=30&amp;t=3306&amp;mode</id>
<entry>
<author><name><![CDATA[sarius]]></name></author>
<updated>2013-06-11T22:43:42+01:00</updated>
<published>2013-06-11T22:43:42+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39035#p39035</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39035#p39035"/>
<title type="html"><![CDATA[Re: Funkcje w asemblerze wywoływane z C]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39035#p39035"><![CDATA[
Może się komuś przyda, dlatego zamieszczam kody.<br />A więc projekt docelowo wygląda tak, 2 pliki źródłowe adc.S i main.c<br /><br />main.c:<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2013-05-31<br /> *      Author: sarius<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include&lt;util/delay.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br /><br />uint16_t pomiar(uint8_t kanal); //deklaracja funkcji pomiaru<br />// definicje zmiennych<br />uint32_t wynik;<br />uint16_t pm;<br />uint8_t cz_d;<br />uint16_t cz_u;<br /><br /><br />//GŁOWNA FUNKCJA programu<br /><br />void adc_init(void); //asembler<br />int main(void)<br />{<br />//inicjalizacja wyswietlacza LCD<br />lcd_init();<br />        adc_init(); //funkcja w asemblerze<br />//nieskończona pętla, w której będziemy dokonywać pomiaru i wyświetlać na LCD<br />while(1)<br />{<br />//skasowanie zawartości LCD<br />lcd_cls();<br />//pomiar napięcia na wejściu ADC5 i wyświetlanie wartości na LCD<br />pm = pomiar(1);<br />wynik = (uint32_t)pm * 121510;<br />cz_d = wynik/10000000;<br />cz_u = (wynik/1000)%1000;<br />lcd_int(cz_d);<br />lcd_char('.');<br />lcd_int(cz_u);<br />lcd_char('V');<br />//odczekanie czasu 1s<br />_delay_ms(500);<br />}<br />return 0;<br />}<br />// DEFINICJA funkcji, która dokonuje pomiaru na wybranym kanale/wyjściu<br />uint16_t pomiar(uint8_t kanal){<br />//ustawienie wybranego kanalu ADC w rejestrze ADMUX<br />ADMUX = (ADMUX &amp; 0xF8) | kanal;<br />//START pomiaru przez ustawienie bitu ADSC w rejestrze ADCSR<br />ADCSR |= (1&lt;&lt;ADSC);<br />//oczekuje na koniec pomiaru (dopoki bit ADSC=1)<br />while( ADCSRA &amp; (1&lt;&lt;ADSC) );<br />//po zakonczeniu pomiaru, gdy bit ADSC=0, zwrocenie wyniku w postaci 16-to bitowej<br />// wartosci z rejestrow ADCH oraz ADCL<br />return ADCW;<br />}[/syntax]<br /><br />adc.S:<br />[syntax=asm]#include &lt;avr/io.h&gt;<br /><br />    .global adc_init<br />    .func adc_init<br />    adc_init:<br />            //konfiguracja ADC<br />            ldi R16, (1&lt;&lt;REFS1) | (1&lt;&lt;REFS0)                            //załadowanie do R16 wartości która posłuży do konfiguracji rejestru ADMUX<br />            out _SFR_IO_ADDR(ADMUX), R16                                            //załadowanie wartośći z R16 do ADMUX<br />            ldi R16, (1&lt;&lt;ADEN) | (1&lt;&lt;ADPS1) | (1&lt;&lt;ADPS2)<br />            out _SFR_IO_ADDR(ADCSRA), R16<br />            ret<br />    .endfunc[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=278">sarius</a> — 11 cze 2013, o 22:43</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-06-11T22:24:25+01:00</updated>
<published>2013-06-11T22:24:25+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39033#p39033</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39033#p39033"/>
<title type="html"><![CDATA[Re: Funkcje w asemblerze wywoływane z C]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39033#p39033"><![CDATA[
W pliku main.c:<br />[syntax=c]#include &lt;avr/io.h&gt;<br /><br />void adc_init(void);<br />int main(void)<br />{<br />adc_init();<br /><br />while(1)<br />{<br /><br />}<br />return 0;<br />}[/syntax]<br />W pliku adc.S:<br />[syntax=c]#include &lt;avr/io.h&gt;<br /><br />.global adc_init<br />.func adc_init<br />adc_init:<br />//konfiguracja ADC<br />ldi R16, (1&lt;&lt;REFS1) | (1&lt;&lt;REFS0)                            //załadowanie do R16 wartości która posłuży do konfiguracji rejestru ADMUX<br />out _SFR_IO_ADDR(ADMUX), R16                                            //załadowanie wartośći z R16 do ADMUX<br />ldi R16, (1&lt;&lt;ADEN) | (1&lt;&lt;ADPS1) | (1&lt;&lt;ADPS2)<br />out _SFR_IO_ADDR(ADCSRA), R16<br />ret<br />.endfunc[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 11 cze 2013, o 22:24</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-06-11T22:17:16+01:00</updated>
<published>2013-06-11T22:17:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39032#p39032</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39032#p39032"/>
<title type="html"><![CDATA[Re: Funkcje w asemblerze wywoływane z C]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39032#p39032"><![CDATA[
No ja tak z ręki też nie napiszę ale na tej stronce japończyka znajdziesz np gotowe funkcje w asm do transmisji przez UART <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> może je wykorzystaj ? skoro to chodzi o pomysł Dr'a <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 11 cze 2013, o 22:17</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sarius]]></name></author>
<updated>2013-06-11T22:06:11+01:00</updated>
<published>2013-06-11T22:06:11+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39031#p39031</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39031#p39031"/>
<title type="html"><![CDATA[Re: Funkcje w asemblerze wywoływane z C]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39031#p39031"><![CDATA[
Panie Mirku bardzo dobrze zdaję sobie sprawę z tego, iż to masochistyczny pomysł. Niestety nie mój. Prowadzący u mnie na uczelni zażyczył sobie takie wstawki przy pomiarze napięcia na ADC. Oczywiście pomiar napięcia na ADC już ogarnąłem i rozumiem, co tam się dzieje, ale nie potrafię żadnej funkcji zamienić na kod w asemblerze. Skutkować to będzie marudzeniem Dr, że nie wykonałem zadania w 100%. Najgorsze jest to, że mam na zrobienie tego jeszcze tą noc <img src="https://forum.atnel.pl/images/smilies/icon_e_smile.gif" alt=":)" title="Szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=278">sarius</a> — 11 cze 2013, o 22:06</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-06-11T21:50:20+01:00</updated>
<published>2013-06-11T21:50:20+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39030#p39030</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39030#p39030"/>
<title type="html"><![CDATA[Re: Funkcje w asemblerze wywoływane z C]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39030#p39030"><![CDATA[
<div class="quotetitle">sarius napisał(a):</div><div class="quotecontent"><br />Ogólnie słabo rozumiem asemblera<br /></div><br /><br />no niestety ale ze słabą znajomością asemblera to ciężko ci będzie sobie poradzić ze wstawkami już na MAX'a <br /><br />powiedz mi proszę skąd taki hmmm poniekąd masochistyczny pomysł ? <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /><br /><br />Pominę już milczeniem że taka wstawka - to akurat na prawdę uwierz mi (nie chcę cię urazić broń boże) ale to najczystszy bezsens <img src="https://forum.atnel.pl/images/smilies/icon_e_sad.gif" alt=":(" title="Smutny" /><br /><br />i widzisz właśnie fakt że słabo znasz asemblera powoduje że raczej będziesz wymyślał takie zastosowania hmmm nieteges<br /><br />wstawki asemblera w C stosuje się w zasadzie TYLKO z dwóch powodów:<br /><br />1. potrzebne są jakieś mocno - drastycznie rzekłbym, czaso-zależne procedury<br />2. aby wydać jakieś tam pojedyncze polecenia ASM ... <br /><br /><br />przy czym odnośnie pkt nr.1 stosuje się to w oddzielnych plikach i na tej japońskiej stronie jest to ładnie pokazane - WCALE a WCALE nawet nie trzeba patrzeć na japońskie krzaczki-ptaszki <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> albo można sobie włączyć tłumacza googla i zrobi z nich angielski tekst<br /><br />to co tam napisane można zrozumieć bez czytania komentarzy no ale .... ale wymagana jest do tego znajomość asemblera a u ciebie z nią krucho jak sam mówisz<br /><br />Może więc zacznij jeśli już się uparłeś na asm - od nauki asemblera od podstaw na bazie jakiejś książki czy kursu z netu - zobacz z czym to się je najpierw ... to potem łatwiej w ogóle będzie ci myśleć o wstawkach asm - tak sobie myślę<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 11 cze 2013, o 21:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sarius]]></name></author>
<updated>2013-06-11T20:12:39+01:00</updated>
<published>2013-06-11T20:12:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39027#p39027</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39027#p39027"/>
<title type="html"><![CDATA[Re: Funkcje w asemblerze wywoływane z C]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39027#p39027"><![CDATA[
Ogólnie słabo rozumiem asemblera, a z takimi krzakami w komentarzach to już w ogóle nic <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=278">sarius</a> — 11 cze 2013, o 20:12</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Jaglarz]]></name></author>
<updated>2013-06-11T19:51:38+01:00</updated>
<published>2013-06-11T19:51:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39026#p39026</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39026#p39026"/>
<title type="html"><![CDATA[Re: Funkcje w asemblerze wywoływane z C]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39026#p39026"><![CDATA[
Spróbuj tego:<br /><br /><a href="http://forum.atnel.pl/topic3259.html"  class="postlink">http://forum.atnel.pl/topic3259.html</a><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=471">Jaglarz</a> — 11 cze 2013, o 19:51</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[sarius]]></name></author>
<updated>2013-06-11T19:30:19+01:00</updated>
<published>2013-06-11T19:30:19+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39023#p39023</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39023#p39023"/>
<title type="html"><![CDATA[Funkcje w asemblerze wywoływane z C]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3306&amp;p=39023#p39023"><![CDATA[
Witam,<br />Mam następujący kod:<br />[syntax=c]/*<br /> * main.c<br /> *<br /> *  Created on: 2013-05-31<br /> *      Author: sarius<br /> */<br /><br />#include &lt;avr/io.h&gt;<br />#include &lt;avr/delay.h&gt;<br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;asembler.S&quot;<br /><br />uint16_t pomiar(uint8_t kanal); //deklaracja funkcji pomiaru<br />// definicje zmiennych<br />uint32_t wynik;<br />uint16_t pm;<br />uint8_t cz_d;<br />uint16_t cz_u;<br /><br /><br />//GŁOWNA FUNKCJA programu<br />int main(void) {<br />//inicjalizacja wyswietlacza LCD<br />lcd_init();<br />//wybor napiecia odniesienia<br />ADMUX |= (1&lt;&lt;REFS1) | (1&lt;&lt;REFS0);<br />//wlaczenie modulu ADC oraz ustawienie preskalera<br />ADCSRA |= (1&lt;&lt;ADEN) | (1&lt;&lt;ADPS1) | (1&lt;&lt;ADPS2);<br /><br />//nieskończona pętla, w której będziemy dokonywać pomiaru i wyświetlać na LCD<br />while(1){<br />//skasowanie zawartości LCD<br />lcd_cls();<br />//pomiar napięcia na wejściu ADC5 i wyświetlanie wartości na LCD<br />pm = pomiar(1);<br />wynik = (uint32_t)pm * 121510;<br />cz_d = wynik/10000000;<br />cz_u = (wynik/1000)%1000;<br />lcd_int(cz_d);<br />lcd_char('.');<br />lcd_int(cz_u);<br />lcd_char('V');<br />//odczekanie czasu 1s<br />_delay_ms(500);<br />}<br />}<br />// DEFINICJA funkcji, która dokonuje pomiaru na wybranym kanale/wyjściu<br />uint16_t pomiar(uint8_t kanal){<br />//ustawienie wybranego kanalu ADC w rejestrze ADMUX<br />ADMUX = (ADMUX &amp; 0xF8) | kanal;<br />//START pomiaru przez ustawienie bitu ADSC w rejestrze ADCSR<br />ADCSR |= (1&lt;&lt;ADSC);<br />//oczekuje na koniec pomiaru (dopoki bit ADSC=1)<br />while( ADCSRA &amp; (1&lt;&lt;ADSC) );<br />//po zakonczeniu pomiaru, gdy bit ADSC=0, zwrocenie wyniku w postaci 16-to bitowej<br />// wartosci z rejestrow ADCH oraz ADCL<br />return ADCW;<br />}[/syntax]<br /><br />Chciałbym włączyć moduł ADC i wybrać źródło odniesienia w asemblerze. Jak mam się do tego zabrać w eclipse? <br />Wystarczy że napiszę zamiast:<br />[syntax=c]//wybor napiecia odniesienia<br />ADMUX |= (1&lt;&lt;REFS1) | (1&lt;&lt;REFS0);<br />//wlaczenie modulu ADC oraz ustawienie preskalera<br />ADCSRA |= (1&lt;&lt;ADEN) | (1&lt;&lt;ADPS1) | (1&lt;&lt;ADPS2);[/syntax]<br />   <br />Takie coś:<br /> [syntax=asm]lcd_init();<br /><br />asm volatile(<br />//konfiguracja ADC<br />ldi R16,(1&lt;&lt;REFS1) | (1&lt;&lt;REFS0)                            //załadowanie do R16 wartości która posłuży do konfiguracji rejestru ADMUX                   <br />out ADMUX, R16                                            //załadowanie wartośći z R16 do ADMUX<br /><br />ldi R16,(1&lt;&lt;ADEN) | (1&lt;&lt;ADPS1) | (1&lt;&lt;ADPS2)   <br />out ADCSRA, R16)[/syntax]<br />    <br /><br />Tak to się robi? Bo nie działa mi w ten sposób.<br />Błędy są następujące:<br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">Description   Resource   Path   Location   Type<br />asembler.S: No such file or directory   main.c   voltage   line 11   C/C++ Problem<br />expected string literal before 'ldi'   main.c   voltage   line 33   C/C++ Problem<br />make: *** &#91;main.o&#93; Error 1   voltage      line 0   C/C++ Problem<br />c:/winavr-20100110/lib/gcc/../../avr/include/avr/delay.h #warning &quot;This file has been moved to &lt;util/delay.h&gt;.&quot;   voltage      line 36   C/C++ Problem<br /></div><br /><br /><span style="color: #FF0000">Kod linstingu umieszczamy przy pomocy syntax - Zielony J.</span><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=278">sarius</a> — 11 cze 2013, o 19:30</p><hr />
]]></content>
</entry>
</feed>