Заметки электроника
Простое - надёжнее!
Меню
  • Главная
  • Погода
  • Заметки
  • Календарь
  • Фотогалерея
  • Песни
  • Чтиво
  • Программы
  • Скачать
  • Связь и ссылки
  • Чехия
  • Lavka

Живёшь в Чехии?

DeviceEUI missing in LoRaWAN Commisioning CubeMX

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Программирование микроконтроллеров
Создано: 03 сентября 2023
Обновлено: 03 сентября 2023
Просмотров: 896
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
Here how to fix:
https://community.st.com/t5/wireless-mcu/why-appkey-missing-in-new-firmware-for-cmwx1zzabz-091-lora/td-p/197995

Trace Pixels To Vectors in Full Color

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Компьютерная повседневность
Создано: 02 сентября 2023
Обновлено: 02 сентября 2023
Просмотров: 1122
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна


Convert your JPEG and PNG bitmaps to SVG vectors quickly and easily.

Fully Automatically. Using AI.

Free while in Beta.
https://vectorizer.ai/

 
 

SamacSys for Altium Designer

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Электроника / cхемотехника
Создано: 28 августа 2023
Обновлено: 28 августа 2023
Просмотров: 1239
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
"Если же вы еще не используете Library Loader, то вот что вам нужно знать:
Это замечательный плагин, позволяющий искать и загружать детали непосредственно в Altium Designer.
Его настройка занимает менее 3 минут.
Это совершенно бесплатно."
https://componentsearchengine.com/ADLL.php
 
 

Malahit Firmware Update DSP1 DSP2 DSP3 und China Klone

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Электроника / cхемотехника
Создано: 22 августа 2023
Обновлено: 22 августа 2023
Просмотров: 1175
Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна

ANTIRTOS C++: accessing params queue via pointer (one of the beginning versions)

  • Печать
  • E-mail
Информация о материале
Автор: Super User
Родительская категория: Заметки
Категория: Программирование
Создано: 21 августа 2023
Обновлено: 21 августа 2023
Просмотров: 897

Рейтинг: 5 / 5

Звезда активнаЗвезда активнаЗвезда активнаЗвезда активнаЗвезда активна
#ifndef _NORTOS_H
#define _NORTOS_H

typedef void(*fP)(void);
/// @brief class for finctional pointers queue with supporting of transfer of parameters

class fQ {
private:
    int first;
    int last;
    int length;
    fP * fQueue;
public:
    fQ(int sizeQ);
    ~fQ();
    int push(fP);
    int pull(void);
};

fQ::fQ(int sizeQ){ // initialization of Queue
  fQueue = new fP[sizeQ];
  last = 0;
  first = 0;
  length = sizeQ;
};

fQ::~fQ(){ // initialization of Queue
  delete [] fQueue;
};

int fQ::push(fP pointerF){ // push element from the queue
  if ((last+1)%length == first){
            return 1;
  }

  fQueue[last++] = pointerF;
  last = last%length;
  return 0;
};

int fQ::pull(void){ // pull element from the queue
  if (last != first){
  fQueue[first++]();
  first = first%length;
  return 0;
  }

  else{
   return 1;
  }

};

template <typename T>
class fQP {
private:
    int first;
    int last;
    int length;
    typedef void (*FunctionPointer)(T*);
    FunctionPointer* FP_Queue;
    T* PARAMS_array;
public:
    fQP(int sizeQ);
    ~fQP();
    int push(void (*pointerQ)(T*), T parameterQ);
    int pull();
};

template <typename T>
fQP<T>::fQP(int sizeQ) {
    FP_Queue = new FunctionPointer[sizeQ];
    PARAMS_array = new T[sizeQ];
    last = 0;
    first = 0;
    length = sizeQ;
}

template <typename T>
fQP<T>::~fQP() {
    delete[] FP_Queue;
    delete[] PARAMS_array;
}

template <typename T>
int fQP<T>::push(void (*pointerQ)(T*), T parameterQ) {
    if ((last + 1) % length == first) return 1;
    FP_Queue[last] = pointerQ;
    PARAMS_array[last] = parameterQ;
    last = (last + 1) % length;
    return 0;
}
template <typename T>
int fQP<T>::pull() {
    FunctionPointer pullVar;
    if (last != first) {
        T* Params = &PARAMS_array[first];
        pullVar = FP_Queue[first];
        first = (first + 1) % length;
        pullVar(Params);
        return 0;
    }

    else {
        return 1;
    }
}


#endif
USAGE:
#include <iostream>
#include <chrono>
#include <random>
#include <future>
#include <thread>
#include <unistd.h>
#include "nortos.h"

using namespace std;
random_device dev;
mt19937 rng(dev());
uniform_int_distribution<mt19937::result_type> dist1_1000(1,1000);

fQ F1(16);
fQ F2(12);
fQ F3(18);
fQP<int32_t> F4(20);

void SomeTestFunctionOne(void){
  static int i = 0;
  cout << "SomeTestFunctionOne #"<< i++ << endl;
}


void SomeTestFunctionTwo(void){
  static int i = 0;
  cout << "SomeTestFunctionTwo #"<< i++ << endl;
}


void SomeTestFunctionThree(void){
  static int i = 0;
  cout << "SomeTestFunctionThree #"<< i++ << endl;
}


void SomeTestFunctionFour(int32_t * parameter){
  static int i = 0;
  cout << "SomeTestFunctionFour #"<< i++ << "  passed parameter:" << *parameter<< " located at addr: "<< parameter << endl;
}


volatile int FlagStop = 0;
using namespace std::this_thread; // sleep_for, sleep_until
using namespace std::chrono;

void Timer1() {
  while(!FlagStop){
    F1.push(SomeTestFunctionOne);
    sleep_for(milliseconds(dist1_1000(rng)));
  }
}


void Timer2() {
  while(!FlagStop){
    F2.push(SomeTestFunctionTwo);
    sleep_for(milliseconds(dist1_1000(rng)));
  }
}


void Timer3() {
  while(!FlagStop){
    F3.push(SomeTestFunctionThree);
    sleep_for(milliseconds(dist1_1000(rng)));
  }
}


void Timer4() {
  while(!FlagStop){
    F4.push(SomeTestFunctionFour,42);
    sleep_for(milliseconds(dist1_1000(rng)));
  }
}


int main()
{
  auto Q_one = async(launch::async, &Timer1);
  auto Q_two = async(launch::async, &Timer2);
  auto Q_three = async(launch::async, &Timer3);
  auto Q_four = async(launch::async, &Timer4);
  for(;;){
      F1.pull();
      F2.pull();
      F3.pull();
      F4.pull();
      usleep(10000);
  }
  return 0;
}

In case we need to pass parameter's values(for easier usage only):

template <typename T>
class fQP {
private:
    int first;
    int last;
    int length;
    typedef void (*FunctionPointer)(T);
    FunctionPointer* FP_Queue;
    T* PARAMS_array;
 
public:
    fQP(int sizeQ);
    ~fQP();
    int push(void (*pointerQ)(T), T parameterQ);
    int pull();
};
 
template <typename T>
fQP<T>::fQP(int sizeQ) {
    FP_Queue = new FunctionPointer[sizeQ];
    PARAMS_array = new T[sizeQ];
    last = 0;
    first = 0;
    length = sizeQ;
}
 
template <typename T>
fQP<T>::~fQP() {
    delete[] FP_Queue;
    delete[] PARAMS_array;
}
 
template <typename T>
int fQP<T>::push(void (*pointerQ)(T), T parameterQ) {
    if ((last + 1) % length == first) return 1;
    FP_Queue[last] = pointerQ;
    PARAMS_array[last] = parameterQ;
    last = (last + 1) % length;
    return 0;
}
 
template <typename T>
int fQP<T>::pull() {
    FunctionPointer pullVar;
    if (last != first) {
        T Params = PARAMS_array[first];
        pullVar = FP_Queue[first];
        first = (first + 1) % length;
        pullVar(Params);
        return 0;
    }
    else {
        return 1;
    }
}
Now we can use it like:
void SomeTestFunctionFour(int32_t parameter){
  static int i = 0;
  cout << "SomeTestFunctionFour #"<< i++ << "  passed parameter:" << parameter << endl;
}

F4.push(SomeTestFunctionFour,42);

Be careful with handling arrays, passing their pointer to push function, they should be static, otherwise better to envelop them into structure/class - in this case memory for storage of parameters will be allocated in queue

  1. Трассировка дифференциальных пар в Altium Designer с назначением импеданса
  2. Samsung NX3000 разбор
  3. Do You Really Need Power Planes? Are you sure? | Eric Bogatin
  4. Воросы на получение HAM категории в Чехии

Страница 36 из 197

  • 31
  • 32
  • 33
  • 34
  • ...
  • 36
  • 37
  • 38
  • 39
  • ...

Back to Top

© 2026 Заметки электроника

Top.Mail.Ru