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

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2013-07-15T19:14:38+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=4&amp;t=3547&amp;mode</id>
<entry>
<author><name><![CDATA[mirekk36]]></name></author>
<updated>2013-07-15T19:14:38+01:00</updated>
<published>2013-07-15T19:14:38+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3547&amp;p=41941#p41941</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3547&amp;p=41941#p41941"/>
<title type="html"><![CDATA[Re: Wave player - rozbicie na kilka plików]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3547&amp;p=41941#p41941"><![CDATA[
<div class="quotetitle">mesho napisał(a):</div><div class="quotecontent"><br />Btw. tak myślałem że za wrzucenie tych pełnych funkcji ktoś mnie zjedzie<br /></div><br /><br />eeeeeś <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> nie zdążyłem <img src="https://forum.atnel.pl/images/smilies/icon_e_wink.gif" alt=";)" title="Puszcza oko" /> .... udało ci się hyhyhy<br /><br />a na poważnie, jak widzisz na wszystko jest logiczne wyjaśnienie i rozwiązanie.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=54">mirekk36</a> — 15 lip 2013, o 19:14</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mesho]]></name></author>
<updated>2013-07-15T18:09:08+01:00</updated>
<published>2013-07-15T18:09:08+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3547&amp;p=41932#p41932</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3547&amp;p=41932#p41932"/>
<title type="html"><![CDATA[Re: Wave player - rozbicie na kilka plików]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3547&amp;p=41932#p41932"><![CDATA[
Czyli jak dobrze rozumiem mam w tym przypadku prawidłowo będzie pozostawić bez przedrostków?<br />[syntax=c]UINT play ( const char *fn );[/syntax]<br />Łał działa, o to chodziło, dzięki!<br /><br />Btw. tak myślałem że za wrzucenie tych pełnych funkcji ktoś mnie zjedzie <img src="https://forum.atnel.pl/images/smilies/icon_e_biggrin.gif" alt=":D" title="Bardzo szczęśliwy" /> Okej, powymazywałem lwią część.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=381">mesho</a> — 15 lip 2013, o 18:09</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Krauser]]></name></author>
<updated>2013-07-15T17:50:29+01:00</updated>
<published>2013-07-15T17:50:29+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3547&amp;p=41930#p41930</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3547&amp;p=41930#p41930"/>
<title type="html"><![CDATA[Re: Wave player - rozbicie na kilka plików]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3547&amp;p=41930#p41930"><![CDATA[
Wszystkie funkcje bez modyfikatora są widoczne we wszystkich plikach projektu, a dopiero funkcje z przedrostkiem static są dostępne tylko w tym pliku, gdzie są zdefiniowane. Nie używaj extern w stosunku do funkcji.<br /><br />Skoro funkcja play ma być widoczna w innym pliku to nie powinna mieć przedrostka static.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=465">Krauser</a> — 15 lip 2013, o 17:50</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[mesho]]></name></author>
<updated>2013-07-15T18:10:15+01:00</updated>
<published>2013-07-15T17:35:39+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=3547&amp;p=41929#p41929</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=3547&amp;p=41929#p41929"/>
<title type="html"><![CDATA[Wave player - rozbicie na kilka plików]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=3547&amp;p=41929#p41929"><![CDATA[
Witam!<br /><br />Eksperymentuje z przykładem wave playera z drugiej książki z lekcji 14 i chciałem rozbić ten projekt na kilka plików. Udało mi się przenieść prawie wszystko, poza ostatnią funkcją dotyczącą odtwarzania <strong>play</strong>, która potrzebuje mieć przedrostek extern, aby być dostępne w main.c, dobrze mówię?  <br /><br />[syntax=c]/*<br /> * main.cF_CPU = 20MHz<br /> *<br /> *  Created on: 2011-11-11<br /> *       Autor: Miros³aw Kardaœ<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />#include &quot;PetitFS/diskio.h&quot;<br />#include &quot;PetitFS/pff.h&quot;<br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;player.h&quot;<br /><br /><br /><br /><br /><br />//! **************** main() ***********************************************<br />int main(void) {<br /><br />lcd_init();<br />lcd_str(&quot;AVR WAV Player.&quot;);<br />DDRA |= (1&lt;&lt;PA7);<br />PORTA |= (1&lt;&lt;PA7);<br /><br /><br />PORTB = 0xff;// podci¹gniêcie PORTB do VCC<br /><br />DDRB |= (1&lt;&lt;PB1);// wyjœcie do sterowania zasilaniem karty SD<br /><br />DDRC = 255;// ca³y PORTC jako wyjœcie<br />PORTC = 255;// zgaœ wszystkie diody<br /><br />PORTD |= (1&lt;&lt;PD2)|(1&lt;&lt;PD3);// podci¹gniêcie wyjœæ<br />PORTB |= (1&lt;&lt;PB0);// klawiszy do VCC<br /><br /><br />// definicje w³asnych znaków na wyœwietlacz LCD<br />lcd_defchar(0, cplay);<br />lcd_defchar(1, cnext);<br /><br />// init SPI<br />DDRB |= (1&lt;&lt;CS)|(1&lt;&lt;MOSI)|(1&lt;&lt;SCK)|(1&lt;&lt;CS);<br />PORTB |= (1&lt;&lt;CS);<br />SPCR |= (1&lt;&lt;SPE)|(1&lt;&lt;MSTR);<br />SPSR |= (1&lt;&lt;SPI2X);// masymalny zegar SCK<br /><br />// konfiguracja PWM (Timer1) noœna<br />TCCR1A = (1&lt;&lt;WGM10)|(1&lt;&lt;COM1A1)|(0&lt;&lt;COM1A0)|(1&lt;&lt;COM1B1);//|(1&lt;&lt;COM1B0);<br />TCCR1B = (1&lt;&lt;CS10);<br /><br />// konfiguracja Timer0 (samplowanie)<br />TCCR0 = (1&lt;&lt;WGM01);// tryb CTC<br />TIMSK = (1&lt;&lt;OCIE0);// zezwolenie na przerwanie CompareMatch<br /><br />sei();// globalne zezwolenie na przerwania<br /><br />// **************** pêtla g³ówna **********************************<br />while(1) {<br />lcd_locate(0,0);<br />lcd_str(&quot;*AVR WAV PLAYER*&quot;);<br />lcd_locate(1,0);<br />lcd_str(&quot; insert SD Card &quot;);<br /><br />//sd_pwr(0);// wy³¹czamy zasilanie karty SD<br />//if( SD_SLOT_EMPTY ) continue;// jeœli karta niewykryta powrót na pocz¹tek while(1)<br />//sd_pwr(1);// W£¥CZAMY zasilanie karty SD<br /><br /><br />if (pf_mount(&amp;Fs)) continue;/* Initialize FS */<br /><br />for (;;) {<br /><br />//if( SD_SLOT_EMPTY ) break;<br /><br />if (pf_opendir(&amp;Dir, &quot;&quot;)) break;/* Open sound file directory (root dir) */<br /><br />while (!pf_readdir(&amp;Dir, &amp;Fno) &amp;&amp; Fno.fname&#91;0&#93;) {/* Play all wav files in the dir */<br />if (!(Fno.fattrib &amp; (AM_DIR|AM_HID))<br />&amp;&amp; strstr(Fno.fname, &quot;.WAV&quot;) ) {<br /><br />// poka¿ napis PLAY<br />lcd_locate(0,0);<br />lcd_str(&quot;PLAY &quot;&quot;\x80&quot;&quot;          &quot;);<br /><br /><br />// wyœwietl nazwê pliku<br />lcd_locate(1,0);<br />lcd_str(Fno.fname);<br />lcd_str(&quot;      &quot;);<br /><br />_delay_ms(300);// odczekaj 300ms<br /><br />if (play(Fno.fname)) break;// odtwarzaj plik WAV<br /><br />}<br />}<br />}<br /><br />} // koniec while(1)<br />}<br />//*******************************************************************************************[/syntax]<br /><br />[syntax=c]/*<br /> * player.c  <br /> *<br /> */<br />#include &lt;avr/io.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;util/delay.h&gt;<br />#include &lt;avr/interrupt.h&gt;<br />#include &lt;string.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />#include &quot;PetitFS/diskio.h&quot;<br />#include &quot;PetitFS/pff.h&quot;<br />#include &quot;LCD/lcd44780.h&quot;<br />#include &quot;player.h&quot;<br /><br />//zmienne do odtwarzania<br />volatile uint16_t tick;// potrzebne do wyœwietlania czasu utworu<br />volatile uint8_t slupek;// do obs³ugi wskaŸnika wysterowania<br />volatile uint8_t nr_buf;// indeks aktywnego buforu<br />uint8_t  buf&#91;2&#93;&#91;BUF_SIZE&#93;;// podwójny bufor do odczytu z karty SD<br />uint8_t cplay&#91;&#93; = {8,12,14,15,15,14,12,8};<br />uint8_t cnext&#91;&#93; = {32,20,10,5,5,10,20,32};<br /><br />volatile int8_t sk1=-1, sk2=4;// zmienne pomocnicze do efektów dŸwiêkowych<br /><br /><br />BYTE rcv_spi (void)<br />{<br /><br />}<br /><br />/*<br /> * FUNKCJA Programowego w³¹czania i wy³¹czania zasilania do karty<br /> * pamiêci MMC/SD w zestawach uruchomieniowych ATB od wersji 1.02<br /> *<br /> * sd_pwr(1) - w³¹czenie zasilania<br /> * sd_pwr(0) - wy³¹czenie zasilania<br /> */<br />void sd_pwr( uint8_t OnOff ) {<br /><br />}<br /><br />/* 0:Invalid format, 1:I/O error, &gt;1:Number of samples */<br />static DWORD load_header (void) {<br /><br />}<br /><br /><br />// ******************  funkcja  P L A Y  ********************************<br />static UINT play ( const char *fn ) {<br /><br /><br />}<br /><br />//***************** przerwanie TIMER0 - samplowanie ******************************************<br /><br />ISR(TIMER0_COMP_vect) {<br /><br />}[/syntax]<br /><br />[syntax=c]/*<br /> * player.h  <br /> *<br /> */<br /><br />#ifndef PLAYER_H_<br />#define PLAYER_H_<br /><br /><br />#define USE44KHZ 0// 0 = pliki max 22,050kHz,    1 = pliki max 44,1kHz<br />//--------------------------------------------------------------------------------------------------------<br /><br />// obs³uga Timer0 z preskalerem = 8<br />#define TMR_START TCCR0 |= (1&lt;&lt;CS01)<br />#define TMR_STOP TCCR0 &amp;= ~(1&lt;&lt;CS01)<br />// obs³uga Timer0 z preskalerem = 64<br />#define TMR64_START TCCR0 |= (1&lt;&lt;CS01)|(1&lt;&lt;CS00)<br />#define TMR64_STOP TCCR0 &amp;= ~((1&lt;&lt;CS01)|(1&lt;&lt;CS00))<br /><br />//*************** makra i zmienne na potrzeby obs³ugi PetitFAT<br />// proszê pamiêtaæ tak¿e o zmianie tych wartoœci w pliku mmc.c !!!!<br />#define SCK PB7<br />#define MOSI PB5<br />#define MISO PB6<br />#define CS PB4<br /><br />#define FCC(c1,c2,c3,c4)(((DWORD)c4&lt;&lt;24)+((DWORD)c3&lt;&lt;16)+((WORD)c2&lt;&lt;8)+(BYTE)c1)/* FourCC */<br /><br />//zasilanie karty SD<br />#define SD_ON PORTB &amp;= ~(1&lt;&lt;PB1)<br />#define SD_OFF PORTB |= (1&lt;&lt;PB1)<br />#define SD_SLOT_EMPTY (PINB &amp; (1&lt;&lt;PB3))<br /><br /><br />// definicja struktury z parametrami WAV<br />typedef struct {<br />uint8_t stereo:1;<br />uint8_t prescaler:1;<br />uint8_t resolution;<br />uint16_t khz;<br />} _FLAGS;<br /><br />volatile _FLAGS FLAGS;// definicja struktury<br /><br />//<br />FATFS Fs;/* File system object */<br />DIR Dir;/* Directory object */<br />FILINFO Fno;/* File information */<br />WORD rb;<br />//<br /><br />#define BUF_SIZE 256// maksymalny rozmiar pojedynczego bufora<br /><br />//zmienne do odtwarzania<br />extern uint8_t cplay&#91;&#93;;<br />extern uint8_t cnext&#91;&#93;;<br />extern volatile uint16_t tick;// potrzebne do wyœwietlania czasu utworu<br />extern volatile uint8_t slupek;// do obs³ugi wskaŸnika wysterowania<br />extern volatile int8_t sk1, sk2;// zmienne pomocnicze do efektów dŸwiêkowych<br />extern volatile uint8_t nr_buf;// indeks aktywnego buforu<br />extern uint8_t  buf&#91;2&#93;&#91;BUF_SIZE&#93;;// podwójny bufor do odczytu z karty SD<br />volatile uint8_t can_read;<br /><br />//f-cje<br />extern static UINT play ( const char *fn );<br />static DWORD load_header (void);<br />extern BYTE rcv_spi (void);<br />extern void sd_pwr( uint8_t OnOff );<br /><br /><br />#endif /* PLAYER_H_ */[/syntax]<br /><br />Natomiast przy kompilacji kompilator krzyczy:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">make all <br />Building file: ../main.c<br />Invoking: AVR Compiler<br />avr-gcc -Wall -Os -fpack-struct -fshort-enums -std=gnu99 -funsigned-char -funsigned-bitfields -mmcu=atmega32 -DF_CPU=16000000UL -MMD -MP -MF&quot;main.d&quot; -MT&quot;main.d&quot; -c -o &quot;main.o&quot; &quot;../main.c&quot;<br />In file included from ../main.c:17:<br />../player.h:65: error: multiple storage classes in declaration specifiers<br />make: *** &#91;main.o&#93; Error 1<br /><br />**** Build Finished ****</div><br /><br />Problem siedzi w linii deklaracji funkcji play... Co zrobiłem nie tak?<br /><br />Pozdrawiam<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=381">mesho</a> — 15 lip 2013, o 17:35</p><hr />
]]></content>
</entry>
</feed>