ESP32 softAP SSID không phải const
Tôi muốn có thể đặt SSID wifi trong thiết lập (), vì vậy tôi có thể tùy chỉnh nó dựa trên địa chỉ MAC hoặc một cái gì đó tương tự. (tránh để ESP có cùng mã có cùng SSID). Tuy nhiên vì nó yêu cầu một const nên dường như không thể thực hiện được, hoặc tôi đang thiếu cái gì đó?
Tôi đang sử dụng platformIO nếu điều đó quan trọng ...
Trả lời
Một consttham số cho một hàm không xác định những gì có thể được truyền. Thay vào đó, nó là một "lời hứa" của hàm rằng nó sẽ không sửa đổi dữ liệu bạn truyền vào.
Trong C khi bạn truyền một "chuỗi" (thực ra là một mảng ký tự) cho một hàm, bạn không thực sự truyền chuỗi (như trong nội dung). Bạn thực sự chỉ cần chuyển một con trỏ đến vị trí trong bộ nhớ nơi chuỗi được lưu trữ.
Một hàm hoàn toàn có thể thực hiện sửa đổi đối với "chuỗi" được truyền vào đó, sẽ sửa đổi dữ liệu gốc trong bộ nhớ. Điều đó không thực sự mong muốn trong nhiều tình huống.
Vì vậy, bằng cách gắn cờ tham số khi constbạn nói với trình biên dịch "Từ thời điểm này trở đi, dữ liệu được trỏ đến bởi biến này không được thay đổi". Mọi nỗ lực ghi vào bộ nhớ bằng cách sử dụng biến đó sẽ bị trình biên dịch chặn.
Không có sự khác biệt thực tế giữa, nói, a char *và const char *khác ngoài cách trình biên dịch xử lý các nỗ lực ghi vào chúng.
Khi bạn chuyển một hàm char *cho một hàm đang mong đợi một const char *con trỏ được "nâng cấp" thành một hằng số để không cho phép cố gắng thay đổi dữ liệu.
Tuy nhiên, trò chuyện không được phép - bạn không thể (hoặc không nên) thử và chuyển đổi a const char *thành a char *như trên một số hệ thống (hệ thống kiến trúc "Princeton" với một không gian địa chỉ bộ nhớ nguyên khối) con trỏ có thể trỏ đến dữ liệu được lưu trữ trong flash, và nỗ lực ghi vào đó rõ ràng sẽ thất bại.
Chức năng bạn đang gọi để đặt SSID chỉ hứa hẹn rằng nó sẽ không cố gắng thay đổi dữ liệu bạn chuyển nó. Không quan trọng đó là hằng số hay không - cả hai sẽ được coi là hằng số và không bị thay đổi.
Thư viện WifiManager có thể phù hợp với bạn, nó có một cổng cố định để định cấu hình kết nối wifi của bạn một cách nhanh chóng. Nó có khá nhiều tùy chọn cấu hình để định hình nó theo ý muốn của bạn nếu tôi không nhầm, tôi hy vọng nó phục vụ bạn tốt.