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.
*/
void keypad_init(void);
void keypad_start(void);
/**
* Reads the last pressed key on the keypad.

Binary file not shown.

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

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

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

Loading…
Cancel
Save