
Jag har ett projekt för RPI Pico W, och jobbar i VS Code på windows burk.
Är ute efter att lagra konfigurationer i flash, men har blandad framgång.
Har i header-fil specat en struct:
Kod: Markera allt
struct larmSettings{
uint32_t base;
char mail[LARM_MAIL_MAX_LEN + 1];
char prefix[LARM_PREFIX_MAX_LEN + 1];
char high[LARM_HIGH_MAX_LEN + 1];
char low[LARM_LOW_MAX_LEN +1 ];
char suffix[LARM_SUFFIX_MAX_LEN + 1];
char highFlank;
char lowFlank;
};

main.c:
Kod: Markera allt
...
#include "dhcpserver/dhcpserver.h"
struct larmSettings larm[4];
...
static const char *cgi_burn_to_flash(int iIndex, int iNumParams, char *pcParam[], char *pcValue[]){
for (int i = 0; i < iNumParams; i++){
if (strcmp(pcParam[i], "burn") == 0) {
if (strncmp(pcValue[i], "larm1", 5) == 0){
// TODO - utred varför base enligt nedan är "1" borde vara i stil med 0x1ffe00
printf("Larm 1 to flash! Address: %x \n", larm[0].base);
printf("Larm 1 prefix sent: %c%c%c...\n", larm[0].prefix[0], larm[0].prefix[1], larm[0].prefix[2]);
burnFlash (pcValue[i], (void*) &larm[0]);
}
...
}
}
return html[1];
}
...
int main() {
...
for(char i = 0; i<4; i++){
larm[i].base = SETTINGS_BASE - (PAGE_SIZE * (i + 1));
printf("BASE %i= %x\n", i+1, larm[i].base);
strncpy(larm[i].prefix, (char*)larm[i].base+XIP_BASE + LARM_PREFIX_OFFSET, LARM_PREFIX_MAX_LEN );
...
}
...
}
Vid uppstart ladda in data från flash i struct.
Det finns några sidor för att justera larminställningar i ram.
Och när man är nöjd bränna till flash (Ja man kan ju bara bränna varje bit en gång efter att den raderats med förväntat resultat, därför kan man bränna en del saker var för sig. Jag tänker mig att ni kan räkna ut att det finns funktioner för wifi och smtp med...)
Base är adressen i flash för just detta larm lagras ej i flash (det vore ju lite dumt....) utan beräknas i början av main()
Debugutskriften i main() ger:
Kod: Markera allt
BASE 1= 1ffe00
BASE 2= 1ffd00
BASE 3= 1ffc00
BASE 4= 1ffb00
Kod: Markera allt
Larm 1 to flash! Address: 1
Larm 1 prefix sent: ban...
Till historien hör att det fungerar bra att lagra data för wifi, dock upprepar sig problemet i smtp-inställningar där jag försöker lagra port i uint16_t, men ett problem i taget så löser det sig nog där med

Skit oxå, det löste sig inte genom att formulera problemet...
Jag skulle kunna hårdkoda adresser men vill inte

Ser någon vad jag strulat till?