Removed UB from picosoc demo firmware
This commit is contained in:
parent
1c8266869a
commit
76124b8649
|
@ -1,5 +1,9 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
|
// a pointer to this is a null pointer, but the compiler does not
|
||||||
|
// know that because "sram" is a linker symbol from sections.lds.
|
||||||
|
extern uint32_t sram;
|
||||||
|
|
||||||
#define reg_spictrl (*(volatile uint32_t*)0x02000000)
|
#define reg_spictrl (*(volatile uint32_t*)0x02000000)
|
||||||
#define reg_uart_clkdiv (*(volatile uint32_t*)0x02000004)
|
#define reg_uart_clkdiv (*(volatile uint32_t*)0x02000004)
|
||||||
#define reg_uart_data (*(volatile uint32_t*)0x02000008)
|
#define reg_uart_data (*(volatile uint32_t*)0x02000008)
|
||||||
|
@ -53,12 +57,12 @@ extern uint32_t cmd_read_spi_flash_id_worker_end;
|
||||||
void cmd_read_spi_flash_id()
|
void cmd_read_spi_flash_id()
|
||||||
{
|
{
|
||||||
uint32_t *src_ptr = &cmd_read_spi_flash_id_worker_begin;
|
uint32_t *src_ptr = &cmd_read_spi_flash_id_worker_begin;
|
||||||
uint32_t *dst_ptr = (uint32_t*)0;
|
uint32_t *dst_ptr = &sram;
|
||||||
|
|
||||||
while (src_ptr != &cmd_read_spi_flash_id_worker_end)
|
while (src_ptr != &cmd_read_spi_flash_id_worker_end)
|
||||||
*(dst_ptr++) = *(src_ptr++);
|
*(dst_ptr++) = *(src_ptr++);
|
||||||
|
|
||||||
((void(*)())0)();
|
((void(*)())&sram)();
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------------
|
// --------------------------------------------------------
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
SECTIONS {
|
SECTIONS {
|
||||||
.memory : {
|
.memory : {
|
||||||
|
sram = 0;
|
||||||
. = 0x100000;
|
. = 0x100000;
|
||||||
start*(.text);
|
start*(.text);
|
||||||
*(.text);
|
*(.text);
|
||||||
|
|
Loading…
Reference in New Issue