Skip to content

Commit 8649105

Browse files
committed
fix subscripting
1 parent 3618461 commit 8649105

File tree

3 files changed

+13
-14
lines changed

3 files changed

+13
-14
lines changed

ports/nrf/common-hal/microcontroller/__init__.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ const nvm_bytearray_obj_t common_hal_mcu_nvm_obj = {
7474
.base = {
7575
.type = &nvm_bytearray_type,
7676
},
77+
.len = CIRCUITPY_INTERNAL_NVM_SIZE,
78+
.start_address = (uint8_t*) (FLASH_SIZE - CIRCUITPY_INTERNAL_NVM_SIZE),
7779
};
7880
#endif
7981

ports/nrf/common-hal/nvm/ByteArray.c

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,37 +35,34 @@
3535
extern uint32_t __fatfs_flash_start_addr[];
3636
extern uint32_t __fatfs_flash_length[];
3737

38-
#define NVM_START_ADDR ((uint32_t)__fatfs_flash_start_addr + \
39-
(uint32_t)__fatfs_flash_length - CIRCUITPY_INTERNAL_NVM_SIZE)
40-
4138
uint32_t common_hal_nvm_bytearray_get_length(nvm_bytearray_obj_t *self) {
42-
return CIRCUITPY_INTERNAL_NVM_SIZE;
39+
return self->len;
4340
}
4441

45-
static void write_page(uint32_t page_addr, uint32_t offset, uint32_t len, uint8_t *bytes) {
46-
// Write a whole page to flash, buffering it first and then erasing and rewriting
42+
static void write_page(uint8_t* page_addr, uint32_t offset, uint32_t len, uint8_t *bytes) {
43+
// Write a whole page to flash, buffering it first and then erasing and rewriting
4744
// it since we can only clear a whole page at a time.
4845

4946
if (offset == 0 && len == FLASH_PAGE_SIZE) {
50-
nrf_nvm_safe_flash_page_write(page_addr, bytes);
47+
nrf_nvm_safe_flash_page_write((uint32_t) page_addr, bytes);
5148
} else {
5249
uint8_t buffer[FLASH_PAGE_SIZE];
53-
memcpy(buffer, (uint8_t *)page_addr, FLASH_PAGE_SIZE);
50+
memcpy(buffer, page_addr, FLASH_PAGE_SIZE);
5451
memcpy(buffer + offset, bytes, len);
55-
nrf_nvm_safe_flash_page_write(page_addr, buffer);
52+
nrf_nvm_safe_flash_page_write((uint32_t) page_addr, buffer);
5653
}
5754
}
5855

5956
bool common_hal_nvm_bytearray_set_bytes(nvm_bytearray_obj_t *self,
6057
uint32_t start_index, uint8_t* values, uint32_t len) {
6158

62-
uint32_t address = NVM_START_ADDR + start_index;
59+
uint32_t address = ((uint32_t) self->start_address) + start_index;
6360
uint32_t offset = address % FLASH_PAGE_SIZE;
6461
uint32_t page_addr = address - offset;
6562

6663
while (len) {
6764
uint32_t write_len = MIN(len, FLASH_PAGE_SIZE - offset);
68-
write_page(page_addr, offset, write_len, values);
65+
write_page((uint8_t*) page_addr, offset, write_len, values);
6966
len -= write_len;
7067
values += write_len;
7168
page_addr += FLASH_PAGE_SIZE;
@@ -75,6 +72,6 @@ bool common_hal_nvm_bytearray_set_bytes(nvm_bytearray_obj_t *self,
7572
}
7673

7774
void common_hal_nvm_bytearray_get_bytes(nvm_bytearray_obj_t *self,
78-
uint32_t start_index, uint32_t len, uint8_t* values) {
79-
memcpy(values, (uint8_t *)(NVM_START_ADDR + start_index), len);
75+
uint32_t start_index, uint32_t len, uint8_t* values) {
76+
memcpy(values, self->start_address + start_index, len);
8077
}

ports/nrf/common-hal/nvm/ByteArray.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131

3232
typedef struct {
3333
mp_obj_base_t base;
34-
uint32_t start_address;
34+
uint8_t* start_address;
3535
uint32_t len;
3636
} nvm_bytearray_obj_t;
3737

0 commit comments

Comments
 (0)