aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorClyne Sullivan <tullivan99@gmail.com>2018-03-26 22:50:56 -0400
committerClyne Sullivan <tullivan99@gmail.com>2018-03-26 22:50:56 -0400
commitb398f319c74d12f2d1641c1fc16dbd5e14bff0b4 (patch)
treec0bc84e78d6dde413e0df0804f20ffb91b4dfa4a
parent2b034ffa10bc6d14adccec6cef5b3c587a70a283 (diff)
fixed linker script
-rw-r--r--include/keypad.h1
-rw-r--r--libinterp.abin71812 -> 47938 bytes
-rw-r--r--link.ld33
-rw-r--r--src/keypad.c45
-rw-r--r--src/main.c2
5 files changed, 50 insertions, 31 deletions
diff --git a/include/keypad.h b/include/keypad.h
index 3dbebdf..5263a0d 100644
--- a/include/keypad.h
+++ b/include/keypad.h
@@ -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.
diff --git a/libinterp.a b/libinterp.a
index c135dfc..f009932 100644
--- a/libinterp.a
+++ b/libinterp.a
Binary files differ
diff --git a/link.ld b/link.ld
index be1c523..b7adb78 100644
--- a/link.ld
+++ b/link.ld
@@ -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
}
diff --git a/src/keypad.c b/src/keypad.c
index 06cef51..20a67c2 100644
--- a/src/keypad.c
+++ b/src/keypad.c
@@ -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);
}
diff --git a/src/main.c b/src/main.c
index 1e9b58d..65fa1d3 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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];