Bagian apa yang dibutuhkan untuk pc. Kami merakit PC gaming dengan tangan kami sendiri

Meja Kerja IAR adalah hak milik dan memerlukan lisensi (jika kode Anda lebih besar dari 32 KB), tetapi cukup baik untuk digunakan di rumah.

Langsung lingkungan pengembangan, yang mencakup kompiler. Setelah menginstal IAR, Anda harus mendaftarkannya dengan mengisi formulir di situs web perusahaan. Tentukan kotak surat asli, kunci lisensi akan dikirimkan kepada Anda.

Anda perlu mengunduh arsip dari situs web ST Microelectronics - ini berisi:

  • CMSIS(Standar Antarmuka Perangkat Lunak Mikrokontroler Cortex) - perpustakaan yang menentukan operasi inti, Cortex M3 yang sama (kita akan membicarakannya nanti);
  • SPL(Perpustakaan Periferal Standar) - pustaka periferal standar yang akan menghemat banyak upaya Anda dalam mengonfigurasi periferal tertentu;
  • Contoh- jika Anda perlu mempelajari cara kerja periferal yang baru bagi Anda, maka folder ini berisi banyak contoh untuk semua kesempatan.

Setelah menjalankan IAR, buat ruang kerja mengajukanBaruruang kerja. Selanjutnya, proyek baru, menu proyekBuat Proyek Baru...

Program dapat ditulis dalam assembler, C atau C++. Kami akan menggunakan bahasa pemrograman C.

Proyek yang dibuat perlu dikonfigurasi, untuk ini kami membuka menu proyekPilihan. di tab Pilihan umum pilih mikrokontroler target - STM32F100x4.


Selain itu, di Konfigurasi Perpustakaan beri tanda centang Gunakan CMSIS. Lingkungan IAR sudah menyertakan pustaka ini, dan tidak perlu menambahkannya ke proyek, tetapi versi baru mungkin mengeluarkan peringatan seperti:

Peringatan : Label 'xxxxx' didefinisikan sebagai pubweak di bagian yang dideklarasikan secara implisit sebagai root

Masalahnya diselesaikan dengan mengganti beberapa baris di perpustakaan CMSIS bawaan: di tempat-tempat di mana CODE:REORDER disebutkan, tambahkan NOROOT(1) . Misalnya:

PUBWEAK NMI_Handler
BAGIAN .teks:KODE:REORDER:NOROOT(1)
NMI_Handler

Selanjutnya, tambahkan jalur tempat file *.c dan *.h akan disimpan - untuk ini, buka tab Kompilasi C/C++ r Praprosesor dan tambahkan &PROJDIR& (variabel yang berisi jalur ke folder proyek).


Di bagian Debugger, pilih sebagai debugger ST-LINK. Beri tanda centang Gunakan pemuat flash dan Memeriksa tab Unduh.

FAQ. Kompiler IAR C untuk mikrokontroler Atmel AVR

V. Poletaev

Pertanyaan yang sering diajukan
jawaban atas pertanyaan yang sering diajukan tentang compiler IAR C untuk mikrokontroler Atmel AVR diberikan oleh V. Poletaev ( [dilindungi email])

Kompiler IAR C untuk mikrokontroler Atmel AVR

Ada beberapa versi kompiler - 1.40, 1.41, 1.50, tetapi untuk beberapa alasan versi 1.40c adalah yang paling banyak digunakan di Rusia. Versi kompilator ditemukan di file ewa90d.txt - jangan bingung dengan versi shell.

Pertanyaan: Saya menginstal IAR Embedded Workbench dan patch untuk itu. Apa lagi yang saya butuhkan?

Jawaban: Versi 1.40 dilengkapi dengan file .xcl yang kurang tepat untuk linker. Selain itu, deskripsi register mikrokontroler di dalamnya tidak lengkap. Untuk operasi normal, masuk akal untuk mengambil satu set file .xcl- dan h dari versi kompiler yang lebih baru, atau dari situs web Atmel (ftp://www.atmel.com/pub/atmel/avr030. zip; ftp://www.atmel.com/pub/atmel/io_def.zip).

Berkas dari arsip ini harus ditulis ulang ke direktori yang sesuai, bukan yang disertakan dengan kompilator.

Saat bekerja di bengkel Tertanam, nama file .xcl yang benar harus ditentukan secara terpisah untuk setiap target di Project|Options|XLINK|Include|XCL nama file, termasuk Override default.

Pertanyaan: Di mana untuk memulai?

Selain itu, disarankan untuk mengunjungi bagian http://www.atmel.com/atmel/products/prod201.htm di situs web Atmel dan mengunduh sejumlah dokumen dari sana:

  • AVR030: Memulai Dengan C untuk AVR (http://www.atmel.com/atmel/acrobat/doc1483.pdf). Contoh yang bagus untuk memulai dengan cepat. Muncul dengan ftp://www.atmel.com/pub/atmel/avr030.zip sebagai lampiran - kumpulan file .xcl yang benar untuk berbagai konfigurasi mikrokontroler.
  • AVR032: File Perintah Linker untuk IAR ICCA90 Compiler (http://www.atmel.com/atmel/acrobat/doc1079.pdf). Ini menjelaskan cara membuat file .xcl. Hanya parafrase dari dokumentasi dari IAR. Bagaimana aplikasi berjalan Contoh lain dengan file .xcl, tetapi sebelumnya. Lebih baik menggunakan opsi dari Memulai.

Di bagian ini, ada sejumlah dokumen lain yang dikhususkan untuk bekerja dengan C dan layak untuk dipertimbangkan dengan cermat, yang khususnya saya perhatikan AVR035: Pengodean C yang Efisien untuk AVR (http://www.atmel.com/atmel/acrobat/doc1497 .pdf).

Untuk pekerjaan yang efektif, Anda juga harus mengambil lembar data dan ralat terbaru untuk mikrokontroler yang dipilih dari http://www.atmel.com/atmel/products/prod200.htm dan mempelajarinya dengan cermat, terutama ralat.

Pertanyaan: Apakah IAR C berbeda dari ANSI C standar?

Jawaban: Ya. IAR C mencakup berbagai ekstensi yang terkait dengan implementasi compiler untuk mikroprosesor arsitektur Harvard (dua ruang alamat - untuk kode dan data) dan untuk pekerjaan yang lebih efisien dalam kondisi mikrokontroler yang terbatas. Lihat Bantuan Pemrograman Kompilator AT90S C, bagian Ekstensi bahasa untuk detailnya.

Sistem pelaksana (perpustakaan) tidak memiliki fungsi yang terkait dengan panggilan sistem operasi (operasi file, dll.).

Pertanyaan: Apakah mungkin untuk meletakkan tabel (baris, dll.) di ROM?

Jawaban: Anda bisa. Untuk melakukan ini, ada ekstensi bahasa - flash kata yang dicadangkan. Variabel yang dideklarasikan menggunakan kata ini terletak di ruang alamat kode dan bersifat read-only.

Flash char aaa = "aaa"; flash char bbb = "bbb"; flash char ccc = "ccc"; flash char flash *xxx = (aaa, bbb, ccc, 0);

Jika lebih dari satu level bersarang digunakan, seperti dalam contoh di atas (array pointer ke string), maka flash harus ada untuk setiap level.

Pertanyaan: Bagaimana cara melewatkan string char flash * ke suatu fungsi? Penulisan langsung string dalam parameter fungsi tidak berfungsi: printf_P("String\n");

Jawaban: Opsi 1.

Jelaskan secara terpisah:

( static flash char str = “String\n”; printf_P(str); )

Opsi 2. Gunakan konversi tipe eksplisit:

Printf_P((char flash *)(int)"String\n");

Anda dapat mempersingkat notasi sedikit dengan #define:

#define F (char flash *)(int) printf_P(F"String\n");

Pada opsi ini, saluran akan ditempatkan di segmen CSTR. Secara default, segmen ini terletak di ruang alamat data, jadi untuk operasi yang benar, Anda perlu memperbaiki file XCL. Perlu untuk menghapus penyebutan CSTR dari baris:

Z(DATA)CSTR,CONST=9000-FFFF

(jika baris ini ada di file XCL sumber) dan masukkan ke dalam baris:

Z(KODE)INTVEC,RCODE,CDATA0, CDATA1,CCSTR,SWITCH, FLASH,CODE=0-1FFFF

Opsi 3. Gunakan sakelar -E.

Opsi ini hanya tersedia saat bekerja dengan kompiler dari baris perintah. Setelah menentukan kunci ini, kompilator menempatkan data string di segmen CSTR dan data const di CONST, dan menganggap bahwa segmen ini terletak di ruang alamat kode.

Varian ini juga memerlukan perbaikan file XCL dengan memindahkan CSTR dan CONST ke baris -Z(CODE).

Selain itu, opsi ini mungkin memiliki masalah dalam menggunakan pustaka yang dikompilasi tanpa opsi -E.

Dan akhirnya, dalam opsi ini, kompiler mengeluarkan pesan peringatan konfigurasi Berbahaya, yang hanya dapat dinonaktifkan bersama dengan semua peringatan, yang tidak nyaman.

Menurut saya, opsi pertama dan kedua adalah yang paling bisa diterima.

Pertanyaan: Bagaimana cara mengubah char * pointer ke char flash *?

Jawaban: Gunakan int perantara:

Char*s; char flash *p; p = (char flash *)(int)s;

Pertanyaan: Di mana variabel const ditempatkan?

Jawaban: Itu tergantung pada opsi kompiler yang diinstal. Secara default (jika opsi -y atau -E tidak ditentukan), variabel-variabel ini ditempatkan di segmen CONST, yang dianggap berada di ruang alamat data. Mode ini dibuat dengan harapan menggunakan memori data non-volatil eksternal dan tidak digunakan dalam banyak kasus. Selain itu, dalam mode ini, tautan menempatkan variabel-variabel ini di area kode pada alamat yang sama, yang dapat menyebabkan masalah serius.

Jika mode –y –“Konstanta dan string yang dapat ditulis” diatur, maka kompiler membuat kode sesuai dengan standar ANSI, menempatkan konstanta dan string di ruang alamat data. Nilai awal mereka disimpan di ruang alamat kode di segmen CDATA0 atau CDATA1 untuk konstanta dan CCSTR untuk string, dan saat startup mereka ditulis ulang dalam RAM di segmen IDATA0/IDATA1 dan ECSTR, masing-masing. Kerugian utama dari mode ini adalah penggunaan RAM yang tidak produktif.

Varian dengan sakelar -E telah dibahas di atas. Anda tidak dapat menggunakan sakelar -y dan -E secara bersamaan.

Untuk menulis versi program yang optimal, lebih baik tidak menggunakan const, tetapi untuk menggambarkan data yang tidak dapat diubah sebagai flash, yang akan menyebabkan penempatan eksplisit mereka dalam memori program tanpa membuang RAM.

Pertanyaan: Bagaimana cara yang lebih nyaman untuk bekerja dengan bit dalam register perangkat eksternal?

Jawaban: Pertama, jelaskan makro yang berguna:

#define Bit(n) (1<< (n)) Для установки бита n в порту p: p |= Bit(n); Для сброса бита: p &= ~Bit(n); Для проверки бита: if ((p & Bit(n)) != 0) ...

Daftar lengkap semua bit tersedia di situs web Atmel di bagian perangkat lunak, file io_def.zip. Anda harus menempatkan file .h dari arsip ini di direktori C:\IAR\EW22DEMO\A90\INC\ alih-alih yang sudah ada.

Pertanyaan: Printf tidak bekerja untuk saya. Apa yang harus saya lakukan untuk menampilkan informasi ke port serial dengan benar?

Jawaban: Pertama, sertakan fungsi putchar terpisah dalam program Anda:

int putchar(int c) ( while ((USR & (1<< UDRE)) == 0); UDR = c; return c; }

Putchar standar di perpustakaan mewakili satu pernyataan RET dan tidak menghasilkan output apa pun.

Untuk mengakses nama bit register yang disebutkan, Anda perlu mendapatkan file .h yang benar dari io_def.zip.

Fungsi ini hanya boleh diaktifkan saat kompilasi di bawah target=release, jika tidak, jendela Terminal I/O mungkin menolak untuk bekerja di bawah debugger. Cara termudah untuk melakukannya adalah dengan mendefinisikan target=debug dengan simbol DEBUG (Project|Options|ICCA90|#define, masukkan simbol) dan mengelilingi definisi putchar dengan arahan kompilasi bersyarat (mis. #ifndef DEBUG ... #endif).

Kedua, Anda harus memasukkan prosedur untuk mengatur baud rate port serial di awal program Anda. Misalnya, untuk kuarsa 5,53 MHz dan nilai tukar 115200 baud, Anda perlu mengatur:

UBRR = 2; UCR=0x18;

Ketiga, printf normal hanya akan berfungsi dengan mode -y -"Konstanta dan string yang dapat ditulis" diaktifkan.

Keempat, Anda harus memilih versi yang tepat dari fungsi printf. Lihat Bantuan Pemrograman Kompilator AT90S C, Konfigurasi, Input, dan output untuk detailnya.

Fungsi printf standar membutuhkan minimal 134 byte RAM pada tumpukan untuk dijalankan. Ini adalah pemborosan yang mengerikan, jadi ada versi singkat dari printf yang memiliki kemampuan pemformatan yang jauh lebih sedikit (khususnya, mereka tidak mendukung pengaturan bidang lebar keluaran), tetapi tidak memerlukan banyak RAM untuk bekerja.

Sebagai solusi akhir untuk masalah ini, saya akan merekomendasikan melakukan hal berikut:

Ambil sebagai dasar file C:\IAR\ \EW22DEMO\A90\ETC\intwri.c dan buat perubahan berikut di dalamnya:

  • tambahkan baris #include "pgmspace.h";
  • ganti deskripsi fungsi dengan int printf_P (const char flash *format, ...);
  • ubah tipe array hex dari const ke flash: static flash char hex = "0123456789ABCDEF".

Setelah itu, jangan lupa untuk melakukan perubahan yang diperlukan pada file XCL (pindahkan CSTR ke bagian KODE).

Tentu saja, Anda perlu memasukkan putchar dan inisialisasi port.

Setelah itu, lupakan keberadaan printf dan gunakan hanya printf_P.

Pertanyaan: Saya tidak punya cukup RAM. Apa yang harus dilakukan?

Singkatnya, aktifkan pengoptimalan ukuran. Bila memungkinkan, gunakan variabel byte (char). Jangan membebani tumpukan dengan variabel lokal yang besar. Cobalah untuk membuat fungsi dengan ukuran besar (cukup!) - beginilah cara kompilator menguraikan variabel maksimum menjadi register. Keefektifan paling baik dinilai dengan daftar dengan mode penyisipan mnemonik diaktifkan. Lebih baik melewatkan tidak lebih dari 2 variabel input ke fungsi - dengan cara ini mereka akan masuk ke dalam register. Tempatkan konstanta di ROM, dengan kata kunci flash.

Pelajari dengan cermat file .xcl yang digunakan - ini disediakan dalam distribusi hanya sebagai contoh dan tidak efisien di beberapa tempat. Tetapkan batas bawah semua segmen DATA (RSTACK, CSTACK, IDATA1, UDATA1, ECSTR) menjadi 60 - ini akan mencapai penggunaan RAM penuh, tanpa lubang. Tentukan ukuran tumpukan perangkat keras (RSTACK) dan perangkat lunak (CSTACK).

Pertanyaan: Port A tidak bekerja untuk saya Mengapa?

Jawaban: Port A digunakan sebagai bus alamat-data saat bekerja dengan RAM eksternal. Jika tidak digunakan, maka baris -e?RSTACK_IN_EXTERNAL_RAM=? harus dikomentari di file .xcl. C_STARTUP.

Pertanyaan: Apakah mungkin membuat file output dalam bentuk biner?

Jawaban: Ya. Untuk melakukan ini, tentukan mpds sebagai format output. File .tsk yang dihasilkan akan menjadi gambar ROM.

Pertanyaan: Bagaimana cara mengganti modul perpustakaan dengan milik Anda?

Jawaban: Cara termudah adalah dengan menempatkan file sumber di direktori proyek kerja Anda dan menghubungkannya ke file proyek. Kemudian shell itu sendiri akan menangani tipenya (.c atau .s90) dan mengurus dockingnya sebelum library.

Pertanyaan: Apa cara terbaik untuk men-debug program?

Jawaban: Jika Anda perlu men-debug algoritma yang tidak bergantung pada periferal, Anda dapat menggunakan C-SPY. Keuntungannya adalah debugging di tingkat teks sumber (tetapi Anda juga dapat melihat teks assembler), kerugiannya adalah praktis tidak ada periferal.

Jika Anda perlu bekerja dengan periferal standar, Anda dapat menggunakan Atmel AVR studio 3.0, yang mengemulasi perilaku kristal dengan cukup akurat. Untuk mentransfer file ke sana, Anda harus menentukan jenis format output debug untuk xlink. Jika karakter di jendela teks sumber di Astudio terdistorsi, maka Anda harus mengatur font monospace yang sesuai (misalnya, terminal untuk pengkodean DOS huruf Rusia atau Kurir untuk Windows) di menu Edit | Font ... PERHATIAN! IAR mengalamatkan memori program byte demi byte, sedangkan Atmel mengalamatkannya kata demi kata. Oleh karena itu, jika subrutin memiliki alamat 1234h dalam file peta dari linker, maka alamat 1234h/2=091Ah harus ditentukan di astudio.

Pertanyaan: EWA90 hanya bekerja di bawah Windows?

Jawaban: Shell - ya. Namun, ada versi baris perintah dari compiler, assembler, dan linker yang bekerja dengan baik di bawah MS-DOS menggunakan DOS Extender built-in dari Phar Lap Software, Inc.

Kesulitan utama saat bekerja dengan mereka adalah sejumlah besar kunci. Saya sarankan Anda bekerja di shell Windows terlebih dahulu, dan kemudian mengambil daftar kunci dari header daftar dan memasukkannya ke dalam makefile.

Pertanyaan: Secara berkala, ketika mengkompilasi file yang benar-benar benar, kesalahan sistem dihasilkan. Apa yang harus dilakukan?

Jawaban: Kompilasi ulang. Ini semacam bug di kompiler yang terkadang terjadi.

Jawaban: Situs web Rusia Atmel memiliki pilihan rekomendasi praktis: http://www.atmel.ru/AVR/AVR.htm dan http://www.atmel.ru/Spec/Spec.htm.

Jawaban atas pertanyaan AVR yang diajukan oleh pengunjung situs web ATMEL dapat ditemukan di http://www.atmel.ru/FAQ/FAQ.htm .

Anda dapat mengajukan pertanyaan kepada perwakilan Rusia dari Atmel - perusahaan EFO melalui konferensi Atmel di situs http://www.efo.ru.

Sejumlah besar spesialis AVR secara teratur berkomunikasi dalam konferensi tentang mikrokontroler di situs web Telesystems -

Tampilan