Pull to refresh
13
0
Сергей Терентьев @Sergey78

User

Send message
В данном случае, звонки от нормальных абонентов с незнакомых номеров проходят. Я думаю это гугл фильтрует, аналогично спаму в почте. Т.е. при входящем звонке ОС запрашивает у сервера гугла информацию о номере звонящего и на основании ответа уже отклоняет вызов.
После звонков с незнакомого номера андроид спрашивает, что это за номер был. И можно просто номер из журнала звонков пометить как спам.
У меня последнее время с обзвонщиками сам андроид бороться научился. Не знаю, фишка это всего андроида, или только на гугловых телефонах, но работает хорошо. Регулярно открывая журнал звонков вижу пропущенные звонки помеченные как спам. Телефон на них не звонит, я их вижу только в пропущенных.
Тоже интересует этот вопрос. Точнее, интересно мнение автора, что удобнее Hantek 2D72 или DSO203(213)?
Интересует именно как переносной небольшой вариант, а не замена настольному осциллографу. В моем случае для работы с автомобилем.
Я в руках ни один из них не держал, но по фото, у Hantek не слишком мелкий экран?
Обзоры на DSO203 читал, по поводу не сильно удобного управления. Но «большой» экран разве не удобнее?
Доп. колесики зло еще и по другой причине. С ними велосипед управляется как автомобиль — повернул руль вправо — поехал вправо. Двухколесный же транспорт управляется с помощью наклона и контр-руления. Поворачивая руль вправо, велосипед наклонится влево и поедет тоже влево.
Этому быстро учатся мотоциклисты, где масса мотоцикла относительно ездока достаточно велика и просто наклонить его быстро не получится.
Вообщем катаясь с колесиками, ребенок учится к одной модели управления. А после того, как колесики сняли — приходится переучиваться.
Я так понимаю в других версиях, вместо этого контроллера схема на трех транзисторах.
Я думал этот контроллер для тестирования стабилитронов или чего-то такого, чего нет в более простых версиях.
А что там не совместимо? Если это просто понижающий dc-dc управляющий питанием?

Я про STC15L104W спрашивал, что за управление питанием с микроконтроллером и зачем так сложно.

Выглядит действительно сложно, очень много действий :) Я avr шью через ftdi232, очень универсальная платка. Под линуксом нужен только avrdude и avr-gcc, все ставится из репов и работает из коробки. Под виндой у ftdi возможно драйвер подменить надо.
В исходниках с svn есть уже готовые make файлы, там только свой программатор указать, и можно шить, там все ключи для avrdude есть.
По мне так попроще выглядит, сказать make и make flash и не тащить winavr и какие-то оболочки для avrdude.


А что за микросхему вы ещё прошивали? И зачем?

Попробовал этот способ, и обнаружил интересное поведение.
Заполнение памяти я добавил прямо в startup, который использую из CMSIS.
изменения в startup
Reset_Handler:
ldr sp, =_estack /* set stack pointer */

ldr r0, =_ebss
ldr r1, =_estack
ldr r2, =0x6B6B6B6B
Clear_Heap:
str r2, [r0, #0]
add r0, #4
cmp r0, r1
bne Clear_Heap



В самом коде, функция func которая должна отъесть от стека 200 байт, и _write, это чтобы вывод printf через SWO работал.
main.c
#include "stm32f4xx.h"
#include <stdio.h>
#include "rcc.h"

uint32_t stack_size=0;
extern uint32_t _ebss;
extern uint32_t _estack;

int _write(int file, char *ptr, int len){
	while(len--) ITM_SendChar(*ptr++);	
	return 0;
}

uint32_t check_stack_size(void) {
    uint32_t *addr = (uint32_t *)&_ebss;

    while ((addr < &_estack) && (*addr == 0x6B6B6B6B)) addr++;
    return ((unsigned)&_estack - (unsigned)addr);
}

void func(void){
	volatile uint8_t data[200];

	data[10]=0xDD;
	data[199]=data[10];
	return;
}

int main(void){

	stack_size=check_stack_size();
	func();
	stack_size=check_stack_size();

	printf("Stack size %ld\n",stack_size);
	stack_size=check_stack_size();

	while(1){
	};
}


Собираю с -O0, значение stack_size смотрю под отладчиком.
Первый вызов функции — stack_size=40, второй вызов — stack_size=208. Как и должно быть.
А вот вызов после printf возвращает 130912. Очевидно, что даже прожорливый printf столько не съест.
Стал смотреть память, и оказалось, что действительно, после вызова printf память за bss изменена. Но не вся, а только небольшой кусок. И со стороны стека, еще кусок.
Насколько я понял, несмотря на то, что я не использую динамическое выделение памяти и _Min_Heap_Size у меня стоит 0, линкер располагает секцию _user_heap_stack за bss. Секция размером _Min_Heap_Size + _Min_Stack_Size. Ну так по крайней мере в моем случае.
Посмотреть это можно в map файле.
И printf видимо использует динамическое выделение памяти.
Я не нашел, как в main.c получить значение переменных _Min_Heap_Size и _Min_Stack_Size из .ld, поэтому просто добавил свое значение размера стека к объявлению переменной:
uint32_t *addr = (uint32_t *)&_ebss + 0x400;

В таком варианте заработало правильно, после вызова printf стек вырос на 352 байта.

И еще небольшое добавление по поводу стека. В некоторых МК STM32 есть CCMRAM. Это область памяти, с которой не может работать DMA, но может ядро МК. Для F407 например, указанный объем RAM в 192кб это 128кб RAM и 64кб CCMRAM. CCMRAM это отдельная секция и если явно не указать, что там надо разместить переменную, то она просто не используется. Так вот, в нее можно положить стек, освободив RAM.
Хотел бы добавить про вывод отладки через SWO.
Чтобы работал вывод printf в vscode, надо в .vscode/launch.json конфигурацию сделать примерно так:
launch.json
 "version": "0.2.0",
    "configurations": [
        {
            "name": "Cortex Debug",
            "cwd": "${workspaceRoot}",
            "executable": "./build/dash.elf",
            "request": "launch",
            "type": "cortex-debug",
            "servertype": "openocd",
            "gdbpath" : "/usr/bin/gdb-multiarch",
            "svdFile": "STM32F429.svd",
            "configFiles": [
                "./stm32f4discovery.cfg"
            ],
            "swoConfig": {
                "source": "probe",
                "enabled": true,
                "swoFrequency": 2000000,
                "cpuFrequency": 180000000,
                "decoders": [
                        {
                                "port": 0,
                                "label": "Output",
                                "type": "console",
                                "encoding":"ascii"                                                                                              
                        }
                ]
                
        }
        }
    ]
}


В cpuFrequency надо указать частоту на которой контроллер работает, у меня это 180Mhz.

В коде надо переопределить функцию _write. В простом случае это примерно так:
write
int _write(int file, char *ptr, int len){
	while(len--) ITM_SendChar(*ptr++);	
	return 0;
}


ITM_SendChar в CMSIS есть.

После этого можно в коде сделать printf(«Hello\n»);
В vscode, в режиме отладки, в окне терминала закладка Output, и там в выпадающем меню выбрать SWO Output.

Небольшой нюанс — вывод printf работает в буфер, и передается в функцию write по символу \n, или какому-то большому размеру. Поэтому, что бы вывод происходил сразу после вызова printf, надо или \n добавлять, или принудительно после printf сбрасывать буфер.
Спасибо, я разобрался уже. Я не стал добавлять сторонние репы, я просто взял с developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads
Там ничего собирать не надо, просто разархивировать куда удобно и в makefile путь до gcc указать.
А gdb, как подсказали выше, в пакете gdb-multiarch в репах есть.
Пробую сделать под ubuntu 18.10 и не очень выходит.
В репах нет gdb-arm-none-eabi. Странно, есть пакеты gdb-avr, gdb-msp430, а под arm нет.
VSCode уже стоял, с Platformio для разработки под ESP32.
Добавил новый workspace, папку .vscode с вашими примерами. .svd взял из TrueStudio. А где настройки как собирать проект? У меня кнопки «Build» просто нет. Должны же быть где-то настройки как вызывать компилятор, путь к скрипту линкера и прочее.
Я понимаю, что у автора ubuntu 16.04, вопрос к тем, кто, возможно, настроил сборку и отладку в 18.10 или просто хорошо разбирается в настройках VSCode.

Я честно говоря тоже не понял, но предположу, что профит в том, что для прошивки st-link или uart не нужен. Если в устройстве есть usb, можно через него прошивать. Но 48кб это перебор. И необходимость специальной программы, тоже как-то не серьезно. Можно же эмулировать usb флэшку и прошивку на нее просто копировать. St-link v2.1 по-моему так умеет.

Это видимо на автомобиль.
На мотоцикл например, который год уже эти сложности с осаго. И в Москве и в Спб.
Мне на несколько машин тоже агент привозит. А на мотик не может, ни в одной из страховых компаний с которыми они работают, не дают оформлять на мото.
Оформление он-лайн тоже квест. На машину думаю проблем не возникнет, а на мот то «какая-то ошибка», то «модели в базе нет», то еще что-то. Но вот просто взять и сделать по-быстрому не получается.
Спасибо за статью. 300 рублей на семью из 6 человек за отсутствие рекламы действительно не дорого. Даже при учете того, что дома реклама из Youtube вырезается в основном на роутере и ее вроде даже на телевизоре особо нет.
Пошел покупать семейную подписку на Youtube Premium, но оказалось, что создать семейную группу для G Suit аккаунтов нельзя. А у меня как раз свой домен размещен у гугла и вся семья в G Suit.
Я конечно извиняюсь, но зачем там вообще GUI и особенно сборка чего-то из исходников?
Я насколько понял, вы там какой-то файловый менеджер собираете? Он чем так особенно хорош, что нужен именно он?
Для вашей связки, по моему мнению, имеет смысл взять минимальную сборку debian, netboot вроде называется и поставить ее без GUI. Из физической консоли надо только поставить sshd и mc. А дальше уже ставить пакеты подключившись по ssh. Это же банально удобнее, чем за клавиатурой «сервера» сидеть.
Ну и как и многие, я бы предложил nginx. Ставится все из пакетов. Примеров конфига полно.
Одно из удобств NC, это раздать файл кому-то. Не надо ничего никуда закачивать, просто дал ссылку и все, она еще и удалиться сама через указанное время. В таком случае самоподписанный сертификат не удобен, т.к. вызывает лишние вопросы, особенно если на «той» стороне не слишком разбирающийся в вопросе пользователь.
Мне кажется, проще эту функцию сделать по таймеру. Если телефон несколько суток не трогали, то, даже в выключенном состоянии, он просто затирает все.
Затирание наверное можно даже с вынутой батарей сделать.
А в чем преимущество канала?
В обычном чате с ботом можно добавить какую-то функциональность к сообщениям. Ответить там, или переслать или сохранить где-то. Зачем в данном случае нужен канал?
Пока читал статью, я думал так же.
Но в случае с университетом смысл доказательства думаю как раз в том, что бы сложно было подделать. Если нет доказательства, злоумышленник может изменить скажем какой-то блок в середине и пересчитать с учетом изменения все остальные блоки. Сделать свою цепочку длиннее и она станет «правильной». Ну или подменить просто оригинальную. Это займет какое-то время, но не сильно большое. А вот если надо майнить доказательство, это займет слишком большое время.
Или я не прав? :)
Вопрос того, зачем нужно доказательство действительно раскрыт не совсем аргументированно.

У меня чуть другая плата, stm32f4, поэтому сразу видно, где в статье не хватило объяснений :)
Поскольку плата отличается, то просто копи-пастом ничего не получится, и надо разбираться что и почему, чтоб внести изменения. И это прекрасно. У меня светодиоды подключены к другому регистру, но благодаря вашему объяснению (в следующей статье :) все легко получилось.
Из того, что осталось за кадром:


В главном меню проекта настраиваем параметр Xtal в значение 8.0 MHz. Данный параметр отвечает за частоту работы кварцевого осциллятора нашего МК:

Почему именно 8? Этот параметр зависит от МК и его можно в datasheet узнать? Или его можно выбирать по своему желанию?


/ Заголовочный файл для нашего семейства микроконтроллеров/
include "stm32f0xx.h"

Как узнать название этого файла? Для моего МК вообщем можно угадать, что будет stm32f4xx.h или загуглить. А как вообще найти его? Или Keil может как-то подсказать?

Information

Rating
4,691-st
Location
Россия
Date of birth
Registered
Activity