fixed bug continuous mode

This commit is contained in:
Kizarm 2024-10-22 20:05:15 +02:00
parent 776ffd5bd2
commit b2c0bc43fe
3 changed files with 16 additions and 9 deletions

View file

@ -77,13 +77,20 @@ void SampleRing::CommandPass(const unsigned int cmd) {
void SampleRing::write(DATA_BLOCK const * data) {
if (m_finished) return;
/** BUG : Tady je problém - tato funkce běží pod přerušením s vyšší prioritou,
/** Tady je problém - tato funkce běží pod přerušením s vyšší prioritou,
* takže m_mode se během tt. funkce změnit nemůže. Z toho vyplývá, že se
* odeslání dat musí vykonat a nelze tedy změnit m_mode dokud se data
* meodešlou do ring_buffer všechna. Tedy to funguje, pokud je TRIGER_MODE_AUTO.
* Kde zde vzít informaci, že se m_mode nějak změnilo a nějak použít
* zatím nevím, nejjednodušší je nechat to být a přenést do software.
* meodešlou do ring_buffer všechna.
* */
if (m_mode != o_mode) { // bug fix
if (m_mode == TIME_BASE_CONTINUOUS) { // Při změně na kontinuální provoz
m_lenght = RING_LEN; // odešli celý ring_buffer.
m_tail = m_head; // Není to ideální, ale funguje to.
m_finished = true; // Příkaz k odeslání to odstartuje.
}
o_mode = m_mode;
return;
}
unsigned t_head = m_head; // dočasné proměnné kvůli zrychlení
unsigned t_lenght = m_lenght; // následujícího cyklu
if (m_mode == TIME_BASE_TRIGERED) {

View file

@ -25,7 +25,7 @@ class SampleRing : public BaseLayer {
bool m_old_triger;
bool m_trigered;
volatile bool m_finished;
TIME_BASE_MODE m_mode; //, o_mode;
TIME_BASE_MODE m_mode, o_mode;
[[gnu::aligned(4)]]char rcvd_buffer [RCVD_BUFLEN];
unsigned rcvd_counter;
@ -33,7 +33,7 @@ class SampleRing : public BaseLayer {
public:
explicit SampleRing () noexcept : BaseLayer(), m_settings(), m_head(0), m_tail(0), m_lenght(0),
m_old_triger(false), m_trigered(false), m_finished(false),
m_mode (TIME_BASE_TRIGERED), // o_mode (TIME_BASE_TRIGERED),
m_mode (TIME_BASE_TRIGERED), o_mode (TIME_BASE_TRIGERED),
rcvd_counter(0u), rcvd_status (RCVD_IDLE) {};
uint32_t Up (const char * data, const uint32_t len) override;
void write (DATA_BLOCK const * data);

View file

@ -79,10 +79,10 @@ void MainWindow::TriggerValues (int n) {
void MainWindow::SendTrigerMode (int n) {
if (n == TRIGER_MODE_SINGLE) ui->buttonStart->setEnabled(true);
else ui->buttonStart->setEnabled(false);
/*
if (n == TRIGER_MODE_AUTO) ui->comboTimeRange->setEnabled(true); // BUG - jinak dojde při přepínání k chybě
else ui->comboTimeRange->setEnabled(false); // TODO
else ui->comboTimeRange->setEnabled(false); // fixed
*/
firmware.SendTrigerMode(n);
}
void MainWindow::SendTrigerEdge (int n) {