ESP32 softAP SSID가 const가 아닙니다.

Sep 22 2020

setup ()에서 wifi SSID를 설정할 수 있기를 원하므로 MAC 주소 또는 이와 유사한 것을 기반으로 사용자 정의 할 수 있습니다. (같은 SSID를 가진 동일한 코드를 사용하는 ESP를 피합니다). 그러나 const가 필요하기 때문에 불가능한 것 같거나 뭔가 빠졌습니까?

중요한 경우 platformIO를 사용하고 있습니다.

답변

1 Majenko Sep 22 2020 at 19:31

const함수에 대한 매개 변수는 전달할 수있는 것을 정의하지 않습니다. 대신 전달하는 데이터를 수정하지 않을 것이라는 함수의 "약속"입니다.

C에서 "문자열"(실제로 문자 배열)을 함수에 전달할 때 실제로 문자열을 전달하지 않습니다 (내용에서와 같이). 실제로 문자열이 저장된 메모리의 위치에 대한 포인터를 전달합니다.

함수가 전달 된 "문자열"을 수정하여 메모리의 원래 데이터를 수정하는 것이 완벽하게 가능합니다. 그것은 많은 상황에서 실제로 바람직하지 않습니다.

따라서 const컴파일러에게 "이 순간부터이 변수가 가리키는 데이터는 변경되지 않아야합니다"라고 말하면서 매개 변수에 플래그를 지정합니다 . 해당 변수를 사용하여 메모리에 쓰려는 모든 시도는 컴파일러에 의해 차단됩니다.

예를 들어 a char *와 a 사이 const char *에는 컴파일러가 쓰기 시도를 처리하는 방법 외에는 실제적인 차이가 없습니다 .

를 char *예상하는 함수에 전달 const char *하면 포인터가 상수로 "업그레이드"되어 데이터를 변경하려는 시도가 허용되지 않습니다.

그러나 그 반대는 허용되지 않습니다 . 일부 시스템 (단일 모 놀리 식 메모리 주소 공간이있는 "Princeton"아키텍처 시스템) const char *에서 a를 char *as 로 변환 할 수 없습니다 (또는 변환해서는 안됩니다 ). 포인터가 저장된 데이터를 가리킬 수 있습니다. 플래시, 쓰기 시도는 분명히 실패합니다.

SSID를 설정하기 위해 호출하는 함수는 전달하는 데이터를 변경하지 않을 것이라고 약속하는 것입니다. 상수인지 여부는 중요하지 않습니다. 둘 다 상수로 처리되고 변경되지 않습니다.

Ananas_hoi Sep 22 2020 at 23:18

라이브러리 WifiManager 는 당신을 위해 작동 할 수 있으며, 그것은 당신의 와이파이 연결을 즉시 구성 할 수있는 캡 티브 포털을 가지고 있습니다. 내가 착각하지 않았다면 당신의 의지에 맞게 구성 할 수있는 몇 가지 구성 옵션이 있습니다.