diff --git a/nengo_loihi/snips/nengo_io.c.template b/nengo_loihi/snips/nengo_io.c.template index 86bf3d0cc..d31a48555 100644 --- a/nengo_loihi/snips/nengo_io.c.template +++ b/nengo_loihi/snips/nengo_io.c.template @@ -21,7 +21,7 @@ void nengo_io(runState *s) { int32_t spike[2]; int32_t error_info[2]; int32_t error_data[MAX_ERROR_LEN]; - int32_t error_index = 0; + int32_t error_index; int32_t output[N_OUTPUTS]; if (inChannel == -1 || outChannel == -1) { @@ -44,6 +44,8 @@ void nengo_io(runState *s) { } // Communicate with learning snip + s->userData[0] = N_ERRORS; + error_index = 1; for (int i=0; i < N_ERRORS; i++) { readChannel(inChannel, error_info, 2); readChannel(inChannel, error_data, error_info[1]); diff --git a/nengo_loihi/snips/nengo_learn.c b/nengo_loihi/snips/nengo_learn.c index 4f5cd3332..b53406a6d 100644 --- a/nengo_loihi/snips/nengo_learn.c +++ b/nengo_loihi/snips/nengo_learn.c @@ -2,15 +2,14 @@ #include #include "nengo_learn.h" -#define N_ERRORS 1 - int guard_learn(runState *s) { return 1; } void nengo_learn(runState *s) { - int offset = 0; - for (int error_index=0; error_index < N_ERRORS; error_index++) { + int offset = 1; + int n_errors = s->userData[0]; + for (int error_index=0; error_index < n_errors; error_index++) { int core = s->userData[offset]; int n_vals = s->userData[offset+1]; for (int i=0; i < n_vals; i++) { @@ -72,5 +71,7 @@ void nengo_learn(runState *s) { .StdpProfile = 1 }; } + } + offset += 2 + n_vals; } }