짧은 대답은 '아니오'입니다. PROGMEM 데이터는 읽기 전용입니다.
플래시 메모리 제한 사항
이해해야 할 첫 번째 사항 은 플래시 메모리 (프로그램 공간이있는 곳)가 장기 고정 스토리지 용으로 설계되었다는 것입니다. 그것으로부터 읽는 것은 매우 빠르고 정확합니다. 그러나 일반적으로 바이트 단위로 수정할 수는 없습니다 (예 : 특정 변수 변경). 일반적으로 큰 블록으로 지우고 다시 써야합니다. 따라서 지우기 및 쓰기주기를 수행하는 동안 다른 곳에 많은 중복 정보를 저장해야하므로 런타임 조작에 완전히 비실용적입니다.
PROGMEM의 실제 기능
코드에 지정된 모든 리터럴 데이터 (예 : 문자열 및 숫자)는 항상 프로그램 공간에 항상 있습니다 (예 : Flash). 그러나 스케치가 실제로 런타임에 해당 데이터를 사용하려면 일반적으로 SRAM에 해당 공간을 할당하고 복사해야합니다. 즉, Flash의 고정 원본과 SRAM의 임시 복사본이라는 두 가지 사본이 생깁니다.
PROGMEM 수정자를 사용할 때 SRAM에서 두 번째 사본을 만들지 말라고 지시합니다. 대신 스케치는 Flash의 원본에 간단히 액세스합니다. 할당 및 복사 작업을 피하기 때문에 데이터 를 읽어야 하는 경우 매우 유용합니다 .
그러나 데이터를 수정하려면 SRAM에 복사해야합니다. 위에서 언급 한 플래시 제한 외에도 코드 안전 문제이기도합니다.
프로그램 공간에 저장된 데이터 를 수정할 수 있으면 논리적으로 프로그램 공간에 저장된 코드를 수정할 수 있습니다 . 이는 간단한 실수 (또는 이론적으로 악의적 인 공격)로 인해 스케치가 런타임에 부분적으로 또는 완전히 다시 작성 될 수 있음을 의미합니다. 이는 단순히 중단하는 것부터 작동하는 것, 연결된 장비의 손상 / 파괴에 이르기까지 매우 예측할 수없는 결과를 가져올 수 있습니다.
추가 정보
여기에서 저수준 PROGMEM에 대한 자세한 내용을 확인할 수 있습니다.
동일한 PROGMEM 학습서의 이전 버전은 여기에서 사용 가능합니다.