fixed bug continuous mode
This commit is contained in:
parent
776ffd5bd2
commit
b2c0bc43fe
3 changed files with 16 additions and 9 deletions
|
@ -77,13 +77,20 @@ void SampleRing::CommandPass(const unsigned int cmd) {
|
||||||
|
|
||||||
void SampleRing::write(DATA_BLOCK const * data) {
|
void SampleRing::write(DATA_BLOCK const * data) {
|
||||||
if (m_finished) return;
|
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
|
* 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
|
* 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.
|
* meodešlou do ring_buffer všechna.
|
||||||
* Kde zde vzít informaci, že se m_mode nějak změnilo a nějak jí použít
|
|
||||||
* zatím nevím, nejjednodušší je nechat to být a přenést do software.
|
|
||||||
* */
|
* */
|
||||||
|
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_head = m_head; // dočasné proměnné kvůli zrychlení
|
||||||
unsigned t_lenght = m_lenght; // následujícího cyklu
|
unsigned t_lenght = m_lenght; // následujícího cyklu
|
||||||
if (m_mode == TIME_BASE_TRIGERED) {
|
if (m_mode == TIME_BASE_TRIGERED) {
|
||||||
|
|
|
@ -25,7 +25,7 @@ class SampleRing : public BaseLayer {
|
||||||
bool m_old_triger;
|
bool m_old_triger;
|
||||||
bool m_trigered;
|
bool m_trigered;
|
||||||
volatile bool m_finished;
|
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];
|
[[gnu::aligned(4)]]char rcvd_buffer [RCVD_BUFLEN];
|
||||||
unsigned rcvd_counter;
|
unsigned rcvd_counter;
|
||||||
|
@ -33,7 +33,7 @@ class SampleRing : public BaseLayer {
|
||||||
public:
|
public:
|
||||||
explicit SampleRing () noexcept : BaseLayer(), m_settings(), m_head(0), m_tail(0), m_lenght(0),
|
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_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) {};
|
rcvd_counter(0u), rcvd_status (RCVD_IDLE) {};
|
||||||
uint32_t Up (const char * data, const uint32_t len) override;
|
uint32_t Up (const char * data, const uint32_t len) override;
|
||||||
void write (DATA_BLOCK const * data);
|
void write (DATA_BLOCK const * data);
|
||||||
|
|
|
@ -79,10 +79,10 @@ void MainWindow::TriggerValues (int n) {
|
||||||
void MainWindow::SendTrigerMode (int n) {
|
void MainWindow::SendTrigerMode (int n) {
|
||||||
if (n == TRIGER_MODE_SINGLE) ui->buttonStart->setEnabled(true);
|
if (n == TRIGER_MODE_SINGLE) ui->buttonStart->setEnabled(true);
|
||||||
else ui->buttonStart->setEnabled(false);
|
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ě
|
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);
|
firmware.SendTrigerMode(n);
|
||||||
}
|
}
|
||||||
void MainWindow::SendTrigerEdge (int n) {
|
void MainWindow::SendTrigerEdge (int n) {
|
||||||
|
|
Loading…
Reference in a new issue