ESP32 softAP SSID bukan const

Sep 22 2020

Saya ingin dapat mengatur SSID wifi di setup (), jadi saya dapat menyesuaikannya berdasarkan alamat MAC atau yang serupa. (menghindari ESP dengan kode yang sama yang memiliki SSID yang sama). Namun karena itu membutuhkan sebuah const, tampaknya tidak mungkin, atau saya kehilangan sesuatu?

Saya menggunakan platformIO jika itu penting ...

Jawaban

1 Majenko Sep 22 2020 at 19:31

Sebuah constparameter ke fungsi tidak mendefinisikan apa yang dapat dilalui. Sebaliknya, fungsi ini adalah "janji" yang tidak akan mengubah data yang Anda berikan.

Di C ketika Anda mengirimkan "string" (yang sebenarnya adalah array karakter) ke fungsi, Anda tidak benar-benar meneruskan string (seperti dalam konten). Anda benar-benar hanya meneruskan pointer ke lokasi di memori tempat string disimpan.

Sangat mungkin bagi sebuah fungsi untuk kemudian membuat modifikasi pada "string" yang diteruskan itu, yang akan mengubah data asli dalam memori. Itu tidak benar-benar diinginkan dalam banyak situasi.

Jadi dengan menandai parameter saat constAnda memberi tahu kompiler "Mulai saat ini dan seterusnya, data yang ditunjukkan oleh variabel ini tidak boleh diubah". Semua upaya untuk menulis ke memori menggunakan variabel itu akan diblokir oleh kompilator.

Tidak ada perbedaan nyata antara, katakanlah, a char *dan a const char *selain dari cara kompilator memperlakukan upaya untuk menulis padanya.

Saat Anda meneruskan char *ke fungsi yang mengharapkan const char *pointer "ditingkatkan" menjadi konstanta sehingga tidak ada upaya untuk mengubah data yang akan diizinkan.

Kebalikannya tidak diperbolehkan - Anda tidak dapat (atau tidak boleh) mencoba dan mengonversi a const char *menjadi char *seperti pada beberapa sistem (sistem arsitektur "Princeton" dengan satu ruang alamat memori monolitik) penunjuk dapat menunjuk ke data yang disimpan di flash, dan upaya untuk menulisnya jelas akan gagal.

Fungsi yang Anda panggil untuk menyetel SSID hanya menjanjikan bahwa ia tidak akan mencoba mengubah data yang Anda berikan. Tidak masalah apakah itu konstan atau tidak - keduanya akan diperlakukan sebagai konstanta dan tidak akan diubah.

Ananas_hoi Sep 22 2020 at 23:18

Perpustakaan WifiManager mungkin berfungsi untuk Anda, ia memiliki portal tawanan untuk mengonfigurasi koneksi wifi Anda dengan cepat. Ada beberapa opsi konfigurasi untuk membentuknya sesuai keinginan Anda jika saya tidak salah, saya harap ini melayani Anda dengan baik.