Jadi saya beralih dari PIC ke ARM dan saya membeli papan penemuan STM32F4. Sejauh ini saya mengerti bahwa untuk memprogramnya Anda dapat mengakses semua register secara langsung dalam memori (cara yang jelas) dan juga ada 3 perpustakaan utama yang dapat Anda gunakan untuk membuat hidup Anda lebih mudah. Sekarang pertanyaan saya adalah, yang mana dari 3 (CMSIS, HAL, Std Peripherals Lib) yang merupakan level paling rendah? yaitu. yang dengan overhead yang lebih sedikit. Tujuan saya adalah mempelajari cara kerja pengendali dan tidak membuat hidup saya lebih mudah (hanya sedikit), jadi saya ingin tahu yang mana yang lebih dekat dengan inti tanpa menggunakan perakitan.
29
Libraries/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
atauDrivers/CMSIS/Device/ST/STM32F4xx/Include/stm32f4xx.h
masing - masing.Jawaban:
Pasti CMSIS. Ini bukan perpustakaan, itu kebanyakan berisi definisi untuk berbagai register.
Ini persis apa yang dibutuhkan seseorang untuk mengakses register mikrokontroler dengan mudah, sehingga dapat mengimplementasikan HALnya sendiri. Tidak ada overhead, karena Anda hanya mengakses register.
Perlu diingat bahwa CMSIS, tidak seperti dua lainnya, didefinisikan oleh ARM dan bukan ST. Ini berarti bahwa berbagai perpustakaan CMSIS di luar sana untuk berbagai mikrokontroler sangat mirip, yang sangat membantu dalam portabilitas.
Selain itu, CMSIS adalah yang lebih sederhana sehingga (IMO) yang paling serbaguna, dan paling dapat diandalkan, dengan kemungkinan lebih sedikit (atau tidak ada) bug. Beberapa perpustakaan hal untuk berbagai MCU yang saya gunakan cukup terkenal untuk bug mereka.
Di sisi lain, CMSIS membutuhkan lebih banyak pekerjaan dari Anda. Namun itu adalah pilihan pribadi saya, karena saya lebih suka menginvestasikan waktu saya membuat perpustakaan berkualitas, yang sesuai dengan kebutuhan saya, dan memahami cara kerja chip, yang hanya menghabiskan waktu untuk belajar hanya perpustakaan baru.
sumber
Untuk mempelajari cara kerjanya, Anda tidak ingin menggunakan yang di atas. Dapatkan compiler arm cross dan dokumentasi dari st, selesai. Mulai coding. chip ini umumnya sangat mudah diprogram. dokumentasi memberi tahu Anda apa bit dalam register apa melakukan apa.
Setiap / semua perpustakaan ini dimaksudkan untuk menghilangkan pemahaman / beban / pekerjaan dari Anda dan membuatnya merasa seperti hanya memanggil api seperti pengalaman pemrograman aplikasi. Itulah yang diinginkan banyak orang. Anda dapat menggunakan semua sumber untuk pustaka ini untuk membantu memahami, tetapi saat Anda menjadi lebih baik, Anda menemukan lubang dan masalah di pustaka, kadang-kadang kode yang sangat menakutkan. kode dilemparkan bersama, ditulis secara umum dan secara kasar porting dari satu chip ke yang lain, mungkin fitur pendukung yang tidak dimiliki chip Anda, dll. Dan mereka semua memiliki jumlah overhead yang berlebihan. 10 hingga 100 kali terlalu banyak kode untuk tugas itu, tentu banyak yang dapat mengoptimalkan tetapi mengapa ada di sana di tempat pertama?
Apakah Anda pergi sendiri atau menggunakan salah satu perpustakaan ini, Anda harus tetap melihat sumber untuk perpustakaan yang Anda gunakan untuk melihat apakah Anda merasa nyaman dengan apa yang mereka lakukan, jika masuk akal, cocok dengan dokumentasi chip, dll. Ketika sesuatu salah Anda cenderung harus menggali barang-barang mereka sebanyak milik Anda untuk mencari tahu mengapa.
Perhatikan bahwa chip docs juga tidak sempurna, itu adalah bagian dari kesenangan.
Saya tidak mengerti mengapa perakitan muncul dalam diskusi tentang pemrograman bare metal. Anda bisa bertahan dengan sangat sedikit perakitan. Untuk chip korteks-m ini, secara teknis Anda hanya membutuhkan sebanyak ini untuk di-boot:
Anda tidak dapat mengandalkan data atau bss dan Anda tidak dapat kembali dari main dengan minimal ASM. Tapi itu semua yang Anda BUTUHKAN untuk mendapatkan logam telanjang. Sekarang jika Anda ingin melakukan interupsi Anda perlu lebih banyak entri dalam tabel vektor. lebih banyak baris kata. Saya merekomendasikan lebih banyak asm, tapi mungkin 10 atau 20 baris lebih.
ini biasanya semua asm yang saya gunakan.
Ya katanya cortex-m0 tapi ini bootstrap yang sebenarnya untuk kode m4 saya. Saya lebih suka ini jempol bukan jempol2. Dan saya hanya menggunakan kembali kode ini dari satu korteks-m ke yang lain, mengubah alamat penunjuk tumpukan yang diperlukan, sehingga bekerja untuk m0, m3 dan m4. Saya belum punya m7, saya juga belum banyak meneliti.
Mengaktifkan fpu mungkin memerlukan beberapa baris asm lagi karena instruksi khusus diperlukan. Tapi intinya adalah jangan bingung pemrograman tingkat rendah dan asm. C memiliki apa yang Anda butuhkan untuk mengkonfigurasi chip, serta menulis aplikasi. Perpustakaan yang Anda bicarakan ditulis dalam C bukan asm, jadi jelas mereka tidak perlu menggunakan asm juga.
Jika Anda ingin mempelajari cara kerja bagian dalam, tulis kode Anda sendiri. Jangan gunakan pustaka ini selain sebagai referensi. Terkadang lebih mudah untuk meretasnya daripada mencoba membaca kode mereka. (bukan hanya ST tetapi semua vendor. Salah satu vendor memiliki sederetan kode sehingga saya menggunakannya sebagai pertanyaan wawancara, tidak akan memposting di sini).
ST tentu saja tetapi vendor lain juga, untuk menghemat daya, memiliki jam yang memungkinkan untuk beberapa bagian dari chip, jadi sebelum Anda masuk dan mencoba untuk mengedipkan sebuah led, Anda perlu menemukan bit aktif untuk blok gpio itu dan melihat apakah itu keluar dari reset diaktifkan, jika tidak kemudian mengaktifkannya, berbicara dengan logika gpio tanpa jam memungkinkan itu hanya menggantung prosesor karena sedang menunggu respons dari logika yang tidak akan pernah merespons. Mereka tidak selalu memberi tahu Anda tentang ini memungkinkan. Setelah diaktifkan maka mereka terkadang memandu Anda melalui init untuk beberapa perangkat tertentu. Dokumen ST cukup bagus. Berasal dari microchip yang mendapat nilai buruk untuk dokumentasi, Anda seharusnya tidak memiliki masalah.
sumber
Saya telah menggunakan keduanya, hanya akses register logam kosong dan perpustakaan periferal std. Saya merasa lebih mudah hanya untuk berurusan dengan register. Juga jika Anda menggunakan debugger, Anda dapat melihat register dan mengonfirmasi bahwa register itu berisi apa yang telah Anda programkan. Saya pikir Anda belajar lebih banyak tentang pengoperasian chip dengan cara itu juga.
sumber
Datang dari dunia 8bit saya selalu terbiasa dengan pemrograman peripheral melalui register. Lembar data mikrokontroler (yaitu manual referensi STM32) menjelaskan periferal secara eksklusif dalam notasi register. Karena programmer harus membaca dokumentasi yang sama ini untuk mengetahui tentang fungsi periferal dan fitur-fitur sebelum ada upaya untuk menggunakannya maka tampaknya wajar bagi saya untuk mulai memprogram register. Dengan tata letak kode yang penuh perhatian dan komentar saya menemukan kode dapat menyenangkan untuk membaca dan memodifikasi bahkan setelah kembali lagi beberapa bulan kemudian.
sumber
Sampai sekarang saya telah menggunakan definisi CMSIS dan menikmati menggunakan register secara langsung. Sementara itu, saya menggunakan perpustakaan HAL di beberapa proyek. Itu memiliki pengaruh yang cukup besar pada waktu menjalankan kode jadi saya berhenti. Meskipun CMSIS melayani minat saya, hari ini saya akan menjadi penggemar libopencm3 . Ini seperti
LL
perpustakaan yang disediakan oleh ST. Namun, itu mencakup lebih banyak pengendali mikro bahkan dalam keluarga ST:harap dicatat bahwa:
Anda dapat menemukan daftar pengendali mikro yang didukung di sini .
sumber
adc_get_result()
yang membungkus driver periferal ADC lengkap termasuk aspek real-time, interupsi dll. Yang ST sepertinyawrite_to_scary_register
adalah yang pada dasarnya hanya pembungkus membengkak di sekitar akses register. Dalam semua keadilan, ST bukan satu-satunya vendor yang memberikan kelebihan seperti itu, Atmel ASF dan lainnya sama buruknya.