Skip to content

Commit

Permalink
Clean up for beta; some bugfixes
Browse files Browse the repository at this point in the history
Tested over full satellite state sequence
  • Loading branch information
MckennaCisler committed Mar 7, 2018
1 parent 224f6c7 commit a7199fd
Show file tree
Hide file tree
Showing 13 changed files with 438 additions and 402 deletions.
744 changes: 372 additions & 372 deletions EQUiSatOS/EQUiSatOS/EQUiSatOs.cproj

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions EQUiSatOS/EQUiSatOS/src/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
#define TESTING_SPEEDUP

// reduces the stack size of some tasks to a workable but risky level
#define RISKY_STACK_SIZES
//#define RISKY_STACK_SIZES

// use this flag to disable reed-solomon tables (frees up memory)
//#define USE_REED_SOLOMON
Expand All @@ -56,11 +56,11 @@
//#define RUN_TASK_STACK_TESTS

// whether to rewrite MRAM with "zero" values (done before launch)
#define WRITE_DEFAULT_MRAM_VALS
//#define WRITE_DEFAULT_MRAM_VALS

/** System Tests/Simulations **/
#define EQUISIM_SIMULATE_DIRECT_STATE_CHANGES
#define EQUISIM_WATCHDOG_RESET_TEST
//#define EQUISIM_WATCHDOG_RESET_TEST

// debug print control; set to:
// 0 to suppress prints and allow radio transmission
Expand Down
12 changes: 10 additions & 2 deletions EQUiSatOS/EQUiSatOS/src/rtos_tasks/rtos_tasks_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,11 @@ enum {
#define TASK_ANTENNA_DEPLOY_STACK_SIZE (768/sizeof(portSTACK_TYPE))
#define TASK_ANTENNA_DEPLOY_PRIORITY (ACTION_PRIORITY)

#define TASK_WATCHDOG_STACK_SIZE (1024/sizeof(portSTACK_TYPE)) // TODO
#ifdef RISKY_STACK_SIZES
#define TASK_WATCHDOG_STACK_SIZE (900/sizeof(portSTACK_TYPE))
#else
#define TASK_WATCHDOG_STACK_SIZE (1024/sizeof(portSTACK_TYPE))
#endif
#define TASK_WATCHDOG_STACK_PRIORITY (STATE_HANDLING_PRIORITY)

#ifdef RISKY_STACK_SIZES
Expand All @@ -55,10 +59,14 @@ enum {
#define TASK_IDLE_DATA_RD_STACK_SIZE (768/sizeof(portSTACK_TYPE))
#define TASK_IDLE_DATA_RD_PRIORITY (DATA_READ_PRIORITY)

#ifdef RISKY_STACK_SIZES
#define TASK_ATTITUDE_DATA_RD_STACK_SIZE (600/sizeof(portSTACK_TYPE))
#else
#define TASK_ATTITUDE_DATA_RD_STACK_SIZE (768/sizeof(portSTACK_TYPE))
#endif
#define TASK_ATTITUDE_DATA_DATA_RD_PRIORITY (DATA_READ_PRIORITY)

#define TASK_LOW_POWER_DATA_RD_STACK_SIZE (768/sizeof(portSTACK_TYPE))
#define TASK_LOW_POWER_DATA_RD_STACK_SIZE (1280/sizeof(portSTACK_TYPE))
#define TASK_LOW_POWER_DATA_RD_PRIORITY (DATA_READ_PRIORITY)

#ifdef RISKY_STACK_SIZES
Expand Down
1 change: 0 additions & 1 deletion EQUiSatOS/EQUiSatOS/src/rtos_tasks/state_handling_task.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ void state_handling_task(void *pvParameters)
#if OVERRIDE_STATE_HOLD_INIT != 1

#ifdef EQUISIM_WATCHDOG_RESET_TEST
test_all_state_transitions();
test_watchdog_reset_bat_charging();
test_watchdog_reset_attitude_data();
test_watchdog_reset_antenna_deploy();
Expand Down
11 changes: 10 additions & 1 deletion EQUiSatOS/EQUiSatOS/src/rtos_tasks/watchdog_task.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
#include "Watchdog_Task.h"

uint32_t WATCHDOG_ALLOWED_TIMES_MS[NUM_TASKS] = {
WATCHDOG_TASK_FREQ + WATCHDOG_BUFFER,
WATCHDOG_TASK_FREQ + WATCHDOG_BUFFER, // doesn't really matter, not used
STATE_HANDLING_TASK_FREQ + WATCHDOG_BUFFER,
ANTENNA_DEPLOY_TASK_LESS_FREQ + WATCHDOG_BUFFER, // TODO: this won't monitor very tight during ANTENNA_DEPLOY
BATTERY_CHARGING_TASK_FREQ + WATCHDOG_BUFFER,
Expand All @@ -36,6 +36,15 @@ void watchdog_init(void) {
prev_time = xTaskGetTickCount();
}

// testing function to get whether a task is checked in
bool _get_task_checked_in(task_type_t task) {
return check_ins[task];
}
// testing function to get time a task was checked in
uint32_t _get_task_checked_in_time(task_type_t task) {
return running_times[task];
}

static void task_pet_watchdog(bool got_mutex) {
pet_watchdog();
print("Pet watchdog");
Expand Down
4 changes: 4 additions & 0 deletions EQUiSatOS/EQUiSatOS/src/rtos_tasks/watchdog_task.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,8 @@ void report_task_running(task_type_t task_ind); // always safe; uses mutex
void check_out_task_unsafe(task_type_t task_ind);
void watchdog_early_warning_callback(void);

// testing functions
bool _get_task_checked_in(task_type_t task);
uint32_t _get_task_checked_in_time(task_type_t task);

#endif /* WATCHDOG_TASK_H_ */
Original file line number Diff line number Diff line change
Expand Up @@ -430,35 +430,35 @@ bool set_sat_state_helper(sat_state_t state)
return false; // only done initially (via direct set)

case ANTENNA_DEPLOY: ;
print("CHANGED STATE to ANTENNA_DEPLOY");
print("\n\nCHANGED STATE to ANTENNA_DEPLOY\n\n");
set_all_task_states(ANTENNA_DEPLOY_TASK_STATES, ANTENNA_DEPLOY);
set_radio_by_sat_state(ANTENNA_DEPLOY);
set_irpow_by_sat_state(ANTENNA_DEPLOY);
return prev_sat_state == INITIAL || prev_sat_state == LOW_POWER;

case HELLO_WORLD: ;
print("CHANGED STATE to HELLO_WORLD");
print("\n\nCHANGED STATE to HELLO_WORLD\n\n");
set_all_task_states(HELLO_WORLD_TASK_STATES, HELLO_WORLD);
set_radio_by_sat_state(HELLO_WORLD);
set_irpow_by_sat_state(HELLO_WORLD);
return prev_sat_state == ANTENNA_DEPLOY;

case IDLE_NO_FLASH: ;
print("CHANGED STATE to IDLE_NO_FLASH");
print("\n\nCHANGED STATE to IDLE_NO_FLASH\n\n");
set_all_task_states(IDLE_NO_FLASH_TASK_STATES, IDLE_NO_FLASH);
set_radio_by_sat_state(IDLE_NO_FLASH);
set_irpow_by_sat_state(IDLE_NO_FLASH);
return prev_sat_state == IDLE_FLASH || prev_sat_state == HELLO_WORLD || prev_sat_state == LOW_POWER;

case IDLE_FLASH: ;
print("CHANGED STATE to IDLE_FLASH");
print("\n\nCHANGED STATE to IDLE_FLASH\n\n");
set_all_task_states(IDLE_FLASH_TASK_STATES, IDLE_FLASH);
set_radio_by_sat_state(IDLE_FLASH);
set_irpow_by_sat_state(IDLE_FLASH);
return prev_sat_state == IDLE_NO_FLASH;

case LOW_POWER: ;
print("CHANGED STATE to LOW_POWER");
print("\n\nCHANGED STATE to LOW_POWER\n\n");
set_all_task_states(LOW_POWER_TASK_STATES, LOW_POWER);
set_radio_by_sat_state(LOW_POWER);
set_irpow_by_sat_state(LOW_POWER);
Expand All @@ -476,7 +476,7 @@ bool set_sat_state(sat_state_t state) {
bool valid = set_sat_state_helper(state);
if (!valid) {
log_error(ELOC_STATE_HANDLING, ECODE_INVALID_STATE_CHANGE, true);
configASSERT(false); // busy loop because this should only be radiation issues
//configASSERT(false); // busy loop because this should only be radiation issues
}
return valid;
#endif
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ void run_rtos(void);
void init_task_state(task_type_t task);

/* TEMPORARY GLOBAL SET STATE FUNCTIONS FOR TESTING - DONT YOU DARE USE THESE */
bool set_sat_state_helper(sat_state_t state);
void set_all_task_states(task_states states, sat_state_t state);
void task_suspend(task_type_t task_id);
void task_resume(task_type_t task_id);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

/* task constants */
#define SYSTEM_TEST_TASK_FREQ 20000
#define SYSTEM_TEST_TASK_STACK_SIZE (768/sizeof(portSTACK_TYPE))
#define SYSTEM_TEST_TASK_STACK_SIZE (712/sizeof(portSTACK_TYPE))
#define SYSTEM_TEST_TASK_PRIORITY tskIDLE_PRIORITY
#define TESTING_TASK_FREQ 1000
#define TESTING_TASK_STACK_SIZE (1024/sizeof(portSTACK_TYPE))
Expand Down
35 changes: 24 additions & 11 deletions EQUiSatOS/EQUiSatOS/src/testing_functions/os_system_tests.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
#define TICKS_IN_EACH_VALID_STATE 11000

// determines how long we spend in each state
#define LOWEST_TASK_FREQ BATTERY_CHARGING_TASK_FREQ
#define LOWEST_TASK_FREQ 15000 //BATTERY_CHARGING_TASK_FREQ
#define IN_STATE_TIME_MS (LOWEST_TASK_FREQ + TASK_EXECUTION_WINDOW_BUFFER_TIME)

void test_all_state_transitions(void)
Expand Down Expand Up @@ -45,54 +45,55 @@ void test_normal_satellite_state_sequence(void) {

if (state_num == 0) {
// start out in initial
check_set_sat_state(INITIAL, INITIAL);
set_sat_state_helper(INITIAL);
vTaskDelay(IN_STATE_TIME_MS / portTICK_PERIOD_MS);
}
report_task_running(STATE_HANDLING_TASK);

if (state_num < 1) {
check_set_sat_state(INITIAL, ANTENNA_DEPLOY);
vTaskDelay(IN_STATE_TIME_MS / portTICK_PERIOD_MS);
state_num++;
}
report_task_running(STATE_HANDLING_TASK);

// the below may actually transition sooner to hello world depending on what the antenna deploy state is
if (state_num < 2) {
check_set_sat_state(ANTENNA_DEPLOY, HELLO_WORLD);
vTaskDelay(IN_STATE_TIME_MS / portTICK_PERIOD_MS);
state_num++;
}
report_task_running(STATE_HANDLING_TASK);

if (state_num < 3) {
check_set_sat_state(HELLO_WORLD, IDLE_NO_FLASH);
vTaskDelay(IN_STATE_TIME_MS / portTICK_PERIOD_MS);
state_num++;
}
report_task_running(STATE_HANDLING_TASK);

if (state_num < 4) {
check_set_sat_state(IDLE_NO_FLASH, IDLE_FLASH);
vTaskDelay(IN_STATE_TIME_MS / portTICK_PERIOD_MS);
state_num++;
}
report_task_running(STATE_HANDLING_TASK);

if (state_num < 5) {
check_set_sat_state(IDLE_FLASH, LOW_POWER);
vTaskDelay(IN_STATE_TIME_MS / portTICK_PERIOD_MS);
state_num++;
}
report_task_running(STATE_HANDLING_TASK);

if (state_num < 6) {
check_set_sat_state(LOW_POWER, IDLE_FLASH);
vTaskDelay(IN_STATE_TIME_MS / portTICK_PERIOD_MS);
state_num++;
}

if (state_num < 7) {
check_set_sat_state(HELLO_WORLD, IDLE_NO_FLASH);
check_set_sat_state(LOW_POWER, IDLE_NO_FLASH);
vTaskDelay(IN_STATE_TIME_MS / portTICK_PERIOD_MS);
state_num++;
}

report_task_running(STATE_HANDLING_TASK);
vTaskDelay(LOWEST_TASK_FREQ * 10);
report_task_running(STATE_HANDLING_TASK);
}

void test_error_case_satellite_state_sequence(void)
Expand All @@ -101,15 +102,17 @@ void test_error_case_satellite_state_sequence(void)

if (state_num == 0) {
// start out in initial
check_set_sat_state(INITIAL, INITIAL);
set_sat_state_helper(INITIAL);
vTaskDelay(IN_STATE_TIME_MS / portTICK_PERIOD_MS);
}
report_task_running(STATE_HANDLING_TASK);

if (state_num < 1) {
check_set_sat_state(INITIAL, ANTENNA_DEPLOY);
vTaskDelay(IN_STATE_TIME_MS / portTICK_PERIOD_MS);
state_num++;
}
report_task_running(STATE_HANDLING_TASK);

// go to emergency low power (the ANTENNA_DEPLOY state is very different from IDLE_NO_FLASH)
if (state_num < 2) {
Expand All @@ -119,13 +122,15 @@ void test_error_case_satellite_state_sequence(void)
vTaskDelay(IN_STATE_TIME_MS / portTICK_PERIOD_MS);
state_num++;
}
report_task_running(STATE_HANDLING_TASK);

// the below may actually transition sooner to hello world depending on what the antenna deploy state is
if (state_num < 3) {
check_set_sat_state(ANTENNA_DEPLOY, HELLO_WORLD);
vTaskDelay(IN_STATE_TIME_MS / portTICK_PERIOD_MS);
state_num++;
}
report_task_running(STATE_HANDLING_TASK);

// go to emergency low power
if (state_num < 4) {
Expand All @@ -135,12 +140,14 @@ void test_error_case_satellite_state_sequence(void)
vTaskDelay(IN_STATE_TIME_MS / portTICK_PERIOD_MS);
state_num++;
}
report_task_running(STATE_HANDLING_TASK);

if (state_num < 5) {
check_set_sat_state(HELLO_WORLD, IDLE_NO_FLASH);
vTaskDelay(IN_STATE_TIME_MS / portTICK_PERIOD_MS);
state_num++;
}
report_task_running(STATE_HANDLING_TASK);

// go to emergency low power, then back again
if (state_num < 6) {
Expand All @@ -150,31 +157,37 @@ void test_error_case_satellite_state_sequence(void)
vTaskDelay(IN_STATE_TIME_MS / portTICK_PERIOD_MS);
state_num++;
}
report_task_running(STATE_HANDLING_TASK);

if (state_num < 7) {
check_set_sat_state(IDLE_NO_FLASH, IDLE_FLASH);
vTaskDelay(IN_STATE_TIME_MS / portTICK_PERIOD_MS);
state_num++;
}
report_task_running(STATE_HANDLING_TASK);

if (state_num < 8) {
check_set_sat_state(IDLE_FLASH, LOW_POWER);
vTaskDelay(IN_STATE_TIME_MS / portTICK_PERIOD_MS);
state_num++;
}
report_task_running(STATE_HANDLING_TASK);

if (state_num < 9) {
check_set_sat_state(LOW_POWER, IDLE_FLASH);
vTaskDelay(IN_STATE_TIME_MS / portTICK_PERIOD_MS);
state_num++;
}
report_task_running(STATE_HANDLING_TASK);

if (state_num < 10) {
check_set_sat_state(HELLO_WORLD, IDLE_NO_FLASH);
vTaskDelay(IN_STATE_TIME_MS / portTICK_PERIOD_MS);
state_num++;
}
report_task_running(STATE_HANDLING_TASK);
vTaskDelay(LOWEST_TASK_FREQ * 10);
report_task_running(STATE_HANDLING_TASK);
}

/************************************************************************/
Expand Down
8 changes: 5 additions & 3 deletions EQUiSatOS/EQUiSatOS/src/testing_functions/rtos_system_test.c
Original file line number Diff line number Diff line change
Expand Up @@ -272,11 +272,13 @@ void print_equistacks(void) {
print_equistack(&low_power_readings_equistack, print_low_power_data, "Low Power Data Stack");
}

void print_task_states(void) {
void print_task_info(void) {
print("\n\n===========Task States===========\n");
for (int i = 0; i < NUM_TASKS; i++) {
eTaskState task_state = eTaskGetState(*(task_handles[i]));
print("%s: %s\n", get_task_str(i), get_task_state_str(task_state));
print("%s: %s (%s) RT: %d\n", get_task_str(i),
get_task_state_str(task_state), _get_task_checked_in(i) ? "checked in " : "checked out",
_get_task_checked_in_time(i));
}
}

Expand Down Expand Up @@ -325,7 +327,7 @@ void rtos_system_test(void) {
print("sat state: \t%s\n", get_sat_state_str(get_sat_state()));
print("reboot #: \t%d\n", cache_get_reboot_count());
print("num errors:\t%d\n", error_equistack.cur_size);
print_task_states();
print_task_info();
print_cur_data_buf(_get_cur_data_buf());
print_equistacks();
print_task_stack_usages();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ const char* get_task_str(task_type_t task);
const char* get_task_state_str(eTaskState state);
const char* get_msg_type_str(msg_data_type_t msg_type);

void print_task_states(void);
void print_task_info(void);
void print_equistack(equistack* stack, void (*elm_print)(void*, int), const char* header);
void print_cur_data_buf(uint8_t* cur_data_buf);
void print_task_stack_usage(task_type_t task, uint32_t stack_size);
Expand Down
2 changes: 1 addition & 1 deletion bootloader/bootloader/src/main_bootloader.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
/* program memory copying parameters */
/************************************************************************/
// size of binary in bytes
#define PROG_MEM_SIZE 144820
#define PROG_MEM_SIZE 147740
// address at which binary is stored in mram
#define MRAM_APP_ADDRESS 60
// address at which prog mem rewritten boolean is stored in mram
Expand Down

0 comments on commit a7199fd

Please sign in to comment.