//! \brief records spikes as needed //! \param[in] neuron_id: the neurons to store spikes from //! \param[in] n_spikes: the number of times this neuron has spiked //! static inline void _mark_spike(uint32_t neuron_id, uint32_t n_spikes) { if (recording_flags > 0) { if (n_spike_buffers_allocated < n_spikes) { uint32_t new_size = 8 + (n_spikes * spike_buffer_size); timed_out_spikes *new_spikes = (timed_out_spikes *) spin1_malloc( new_size); if (new_spikes == NULL) { log_error("Cannot reallocate spike buffer"); rt_error(RTE_SWERR); } uint32_t *data = (uint32_t *) new_spikes; for (uint32_t n = new_size >> 2; n > 0; n--) { data[n - 1] = 0; } if (spikes != NULL) { uint32_t old_size = 8 + (n_spike_buffers_allocated * spike_buffer_size); spin1_memcpy(new_spikes, spikes, old_size); sark_free(spikes); } spikes = new_spikes; n_spike_buffers_allocated = n_spikes; } if (spikes->n_buffers < n_spikes) { spikes->n_buffers = n_spikes; } for (uint32_t n = n_spikes; n > 0; n--) { bit_field_set(_out_spikes(n - 1), neuron_id); } }
static inline void _reset_spikes() { spikes->n_buffers = 0; for (uint32_t n = n_spike_buffers_allocated; n > 0; n--) { clear_bit_field(_out_spikes(n - 1), n_spike_buffer_words); } }