fixed linker script

master
Clyne Sullivan 7 years ago
parent 2b034ffa10
commit b398f319c7

@ -28,6 +28,7 @@
* Starts a task to poll the buttons. Must be called before any keypad reading. * Starts a task to poll the buttons. Must be called before any keypad reading.
*/ */
void keypad_init(void); void keypad_init(void);
void keypad_start(void);
/** /**
* Reads the last pressed key on the keypad. * Reads the last pressed key on the keypad.

Binary file not shown.

@ -35,31 +35,45 @@ SECTIONS {
. = ALIGN(8); . = ALIGN(8);
} > FLASH } > FLASH
/* code sections */ /* other code sections */
.text : { .text : {
. = ALIGN(8); . = ALIGN(8);
*(.text) *(.text)
*(.text*)
*(.init)
*(.fini)
. = ALIGN(8); . = ALIGN(8);
} > FLASH } > FLASH
/* readonly data */ /* read-only data sections */
.rodata : { .rodata : {
. = ALIGN(8); . = ALIGN(8);
*(.rodata) *(.rodata)
*(.rodata*)
*(.eh_frame)
. = ALIGN(8); . = ALIGN(8);
} > FLASH } > FLASH
/* ARM stuff */
.ARM.exidx : {
*(.ARM.exidx)
} > FLASH
/* init_array/fini_array (TODO understand this) */ /* init_array/fini_array (TODO understand this) */
.init_array : { .init_array : {
PROVIDE_HIDDEN(__init_array_start = .); __init_array_start = .;
KEEP(*(.init_array)) KEEP(*(SORT(.init_array.*)))
PROVIDE_HIDDEN(__init_array_end = .); KEEP(*(.init_array*))
__init_array_end = .;
} > FLASH } > FLASH
.fini_array : { .fini_array : {
PROVIDE_HIDDEN(__fini_array_start = .); __fini_array_start = .;
KEEP(*(.fini_array)) KEEP(*(SORT(.fini_array.*)))
PROVIDE_HIDDEN(__fini_array_end = .); KEEP(*(.fini_array*))
__fini_array_end = .;
} > FLASH } > FLASH
/* initialized data */ /* initialized data */
@ -74,9 +88,10 @@ SECTIONS {
/* uninitialized data */ /* uninitialized data */
.bss : { .bss : {
. = ALIGN(8); . = ALIGN(4);
__bss_start__ = .; __bss_start__ = .;
*(.bss) *(.bss)
. = ALIGN(4);
__bss_end__ = .; __bss_end__ = .;
} > RAM } > RAM
} }

@ -49,12 +49,12 @@ static const port_t keypad_cols[COLS] = {
{ COL_0 }, { COL_1 }, { COL_2 }, { COL_3 }, { COL_4 } { COL_0 }, { COL_1 }, { COL_2 }, { COL_3 }, { COL_4 }
}; };
static const int keypad_map[ROWS][COLS] = { //static const int keypad_map[ROWS][COLS] = {
{ '7', '8', '9', 'x', '/' }, // { '7', '8', '9', 'x', '/' },
{ '4', '5', '6', 'y', '*' }, // { '4', '5', '6', 'y', '*' },
{ '3', '2', '1', 'z', '-' }, // { '3', '2', '1', 'z', '-' },
{ '.', '0', '\b', '\n', '+' } // { '.', '0', '\b', '\n', '+' }
}; //};
#define BUFFER_SIZE 8 #define BUFFER_SIZE 8
static char keypad_buffer = 'A';//[BUFFER_SIZE]; static char keypad_buffer = 'A';//[BUFFER_SIZE];
@ -62,22 +62,22 @@ static char keypad_buffer = 'A';//[BUFFER_SIZE];
void keypad_task(void) void keypad_task(void)
{ {
unsigned int col = 0; //unsigned int col = 0;
while (1) { while (1) {
gpio_dout(keypad_cols[col].port, keypad_cols[col].pin, 1); // gpio_dout(keypad_cols[col].port, keypad_cols[col].pin, 1);
for (unsigned int row = 0; row < ROWS; row++) { // for (unsigned int row = 0; row < ROWS; row++) {
if (gpio_din(keypad_rows[row].port, keypad_rows[row].pin)) { // if (gpio_din(keypad_rows[row].port, keypad_rows[row].pin)) {
//if (keypad_buffer_pos < BUFFER_SIZE) // //if (keypad_buffer_pos < BUFFER_SIZE)
keypad_buffer/*[++keypad_buffer_pos]*/ = keypad_map[row][col]; // keypad_buffer/*[++keypad_buffer_pos]*/ = keypad_map[row][col];
while (gpio_din(keypad_rows[row].port, keypad_rows[row].pin)) // while (gpio_din(keypad_rows[row].port, keypad_rows[row].pin))
delay(1); // delay(1);
break; // break;
} // }
} // }
gpio_dout(keypad_cols[col].port, keypad_cols[col].pin, 0); // gpio_dout(keypad_cols[col].port, keypad_cols[col].pin, 0);
col++; // col++;
if (col == COLS) // if (col == COLS)
col = 0; // col = 0;
delay(10); delay(10);
} }
@ -102,7 +102,10 @@ void keypad_init(void)
gpio_speed(p, pin, VERYHIGH); gpio_speed(p, pin, VERYHIGH);
gpio_dout(p, pin, 0); gpio_dout(p, pin, 0);
} }
}
void keypad_start(void)
{
task_start(keypad_task, 1024); task_start(keypad_task, 1024);
} }

@ -74,7 +74,7 @@ void kmain(void)
dsp_init(); dsp_init();
dsp_rect(0, 0, LCD_WIDTH, LCD_HEIGHT, dsp_color(0, 0, 0)); dsp_rect(0, 0, LCD_WIDTH, LCD_HEIGHT, dsp_color(0, 0, 0));
dsp_cursoron(); dsp_cursoron();
keypad_init(); keypad_start();
task_start(task_interpreter, 4096); task_start(task_interpreter, 4096);
/*char buf[2]; /*char buf[2];

Loading…
Cancel
Save