Jump to content

    

esaulenka

Свой
  • Content Count

    1314
  • Joined

  • Last visited

Community Reputation

0 Обычный

About esaulenka

  • Rank
    Профессионал
  • Birthday 01/25/1983

Информация

  • Город
    Маськва

Recent Profile Visitors

7180 profile views
  1. Создайте тему, например, здесь: https://electronix.ru/forum/index.php?app=forums&module=forums&controller=forums&id=194 И прилепите туда несколько capture анализатора. Что-нибудь типа "включил", "три раза нажал кнопку быстрее" и т.д.
  2. class EcgReader: def __init__(self, settings_name: str, data_name: str): with open(settings_name, 'rb') as f: d = f.read() params = d[50:53] self.channels = params[0] self.accel_present = (params[1] != 0) self.block_size = params[2] self.data_file = open(data_name, 'rb') self.idx = 0 def read(self): res = [] for _ in range(self.channels): d = self.data_file.read(3) if len(d) != 3: return None # eof # данные согласно файлу "описалово" # num = (d[0] * 0x10000) + (d[1] * 0x100) + d[2] # данные согласно примеру num = (d[2] * 0x10000) + (d[1] * 0x100) + d[0] if num >= 0x800000: num -= 0x1000000 res.append(num) # skip accelerometer data self.idx += 1 if self.idx == self.block_size: if self.accel_present: self.data_file.read(4) self.idx = 0 return res # some tests if __name__ == '__main__': reader = EcgReader('000_ecg.crd', '000_ecg.bin') print('settings:', reader.channels, reader.accel_present, reader.block_size) for _ in range(10): # while True: d = reader.read() if d is None: break print(d) Деньги перечислите, пожалуйста, куда-нибудь в благотворительный фонд.
  3. Да, UART поверх BLE - это чисто нордиковское нестандартное изобретение. Почитайте их инфоцентр, там, насколько я помню, есть пример терминала для андроида. Под винду придётся самому что-то писать...
  4. ошибка при компиляции С++

    @one_eight_seven, а вы для контроллеров на каком языке пишете? Я по большей части - на плюсах, и как-то так получается, что без синглтонов никуда. Можно использовать подход "как у больших" с динамическим созданием всего-всего и динамическими же связями, но для мелкоконтроллеров это перебор, на мой взгляд.
  5. ошибка при компиляции С++

    Разговор про отладку начал я в соседней теме, когда автор сломал что-то в кишках flatbuffer'а. Что именно сломал, коллективный разум не понял (впрочем, никто из присутствующих не знаком близко с flatbuffer). Вот там без гуляний по шагам с пристальным просмотром всех переменных некомфортно. В комплекте из двух указателей - на экземпляр класса и на сам метод - можно и передать, и использовать. Тут даже где-то была тема про делегаты в с++, где мы это обсуждали. Но один указатель на "голую" функцию проще этой магии на порядок.
  6. Segger RTT в проекте для CortexM0. Linux/GCC/Eclipse.

    Я с чем-то подобным сталкивался на STM32F105. Почему-то при использовании sleep'а консолька стала вести себя неадекватно. К сожалению, так и не дошли руки разобраться - в отладочной версии просто не использую __WFI(). FAQ от сеггера также не рекомендует использовать энергосбережение.
  7. Segger RTT в проекте для CortexM0. Linux/GCC/Eclipse.

    Слегка не в тему. Вы под линуксом работаете, или под виндой? Не могу сказать, что я ОЧЕНЬ пытался, но собрать openocd под винду у меня не получилось... init не вызывается?.. По идее, при первом же RTT_printf должен вызваться.
  8. ошибка при компиляции С++

    Ну вроде б очевидно, что вместе с чтением постов надо смотреть в хрустальный шар и гуглить по ключевым словам. Код из первого сообщения похож на официальный пример: https://github.com/espressif/arduino-esp32/blob/master/libraries/WiFi/examples/WiFiClientEvents/WiFiClientEvents.ino Можно предположить, что он работает. Какой магией при подключении wifi.h подтягивается соотв. кусок BSP - я не знаю. Изучение ESP в планах есть, но всё никак руки не дойдут...
  9. ошибка при компиляции С++

    Подскажите пожалуйста, в какой книжке это описано? https://godbolt.org/z/PyKfGc
  10. странность с выводом строки char *

    В данном случае c_str() это из гугловского flatbuffer::String::c_str. И любая перегрузка operator= - это для синтаксиса наподобие ла_ла_ла.c_str() = "ла-ла-ла", которого нет ни в стандартной библиотеке, ни (насколько мне известно) в велосипедах "по образу и подобию". Ну а автору я б посоветовал читать книжки (уже пора) и изучить слово GDB.
  11. странность с выводом строки char *

    Перегрузки "operator=" у "const char *" ? Удивительно просто.
  12. Вы первоисточник читали? http://www.keil.com/dd/docs/datashts/infineon/c167cr_um.pdf раздел bootstrap loader. Или только чиптюнеров всяких? Я вот только сходу не понял: общение по uart надо начинать сразу же после отпускания ресета, или не раньше, чем сколько-то там микросекунд после отпускания. Но не проще будет найти где-нибудь программатор для параллельных ROM и паяльник?
  13. Нет, я к тому, что по какой-то причине у дисплея CS всегда активен, он не только будет выставлять данные по RD, как мы наблюдаем, но и сохранять (куда-то) данные, записываемые в ОЗУ.
  14. Это всё здорово, но палочки-кружочки могут рисоваться в т.ч. и при всегда активном CSX (во всяком случае, в описании 9341 есть такая сноска). У вас там при записи в RAM никакие артефакты на дисплее не лезут?
  15. Чуток не так. ACK - это не подтверждение приёма тем узлом, которому сообщение предназначено. ACK одновременно выставляют все узлы, которые приняли это сообщение. Соответственно, если на шине больше одного корректно работающего узла, все сообщения получат свои ack'и. Но, с другой стороны, если вам нужно знать, что сообщение принял именно ваш приёмник, а не какой-то другой, придётся делать какой-то протокол поверх этого.