Модуль BW12

nikolz

Well-known member
А жигули в 10 раз и более дешевле нормального авто. Чуда не случилось.
Выбор авто зависит не только от цены, а ее соотношения с доходом ,
от стоимости содержания,
но главное - от цели приобретения.
------------------
Уберите желание выпендриваться перед окружающими и жить не по средствам,
оставьте лишь значимые цели,
и тогда жигули тоже станет нормальным.
-----------------
Если надо поднимать и опускать крышку унитаза,
а не пиариться на форумах,
то нахрена супер-пупер модули,
если и копеечное ESP -нормально решает эту задачу,
да еще и с халявным софтом.
 

pvvx

Активный участник сообщества
Уберите желание выпендриваться перед окружающими и жить не по средствам,
оставьте лишь значимые цели,
и тогда жигули тоже станет нормальным.
И питаться можно какими кормовыми плодами или ещё какой синтетикой и отходами. Жизнь же ваша и вы её сами тратите на уход за жигулями (ESP8266), а не используете по назначению.
 

pvvx

Активный участник сообщества
А как запускать по кнопке на BW-12 разные прошивки, так никто и не намекнул.
Обыкновенно - по if в стартовом коде. Какие там могут быть сложности? Это не ESP8266 и кэш изначально включена на всю область flash.
"Как запускать по кнопке на STM32 разные прошивки?"
 

nikolz

Well-known member
Вот уже про Оку начали писать :) (в прошлой жизни и у меня была Ока) А как запускать по кнопке на BW-12 разные прошивки, так никто и не намекнул.
Намекаю: Надо припаять кнопку и нажимать на нее по азбуке Морзе.
BW-12 читает ваше послание и запускает то, что пожелаете.
Вам остается лишь изучить азбуку Морзе и научить BW-12 понимать ее.
 

aloika

Active member
"Как запускать по кнопке на STM32 разные прошивки?"
Про STM32 информацию-то можно найти:
Код:
void GoToUserApp(void)
{
    u32 appJumpAddress;
    void (*GoToApp)(void);
    appJumpAddress = *((volatile u32*)(FLASH_DISK_START_ADDRESS + 4));
    GoToApp = (void (*)(void))appJumpAddress;
    SCB->VTOR = FLASH_DISK_START_ADDRESS;
    __set_MSP(*((volatile u32*) FLASH_DISK_START_ADDRESS)); //stack pointer (to RAM) for USER app in this address
    GoToApp();
}
В вашей SDK смотрю startup.c - не могу понять, как оно работает. (Может, я вообще не то смотрю?) Где адрес-то написан, с которого начинать выполнение?
 

pvvx

Активный участник сообщества
Про STM32 информацию-то можно найти:
И что это? А где развертка данных в сегменты RAM?

В вашей SDK смотрю startup.c - не могу понять, как оно работает. (Может, я вообще не то смотрю?) Где адрес-то написан, с которого начинать выполнение?
Если "смотрю startup.c ", то адреса в табличке:
Код:
IMAGE2_ENTRY_SECTION
RAM_START_FUNCTION gImage2EntryFun0 = {
    BOOT_Image2,
    SOCPS_WakeFromPG
    };
Стартовый и по пробуждению из всяких sleep...
 

aloika

Active member
И что это? А где развертка данных в сегменты RAM?
Я так понимаю, что это запуск программы с адреса FLASH_DISK_START_ADDRESS.

Вопросы остаются открытыми - как запустить программу с определенного адреса? Где этот адрес указывается в коде загрузчика? Как вообще узнать, что компилируется в загрузчик (какие исходные файлы)?
 

pvvx

Активный участник сообщества
Я так понимаю, что это запуск программы с адреса FLASH_DISK_START_ADDRESS.
Вас не понять. Нет такого FLASH_DISK_START_ADDRESS ни в sdk40b, ни в sdk40b_web.
Вопросы остаются открытыми - как запустить программу с определенного адреса? Где этот адрес указывается в коде загрузчика? Как вообще узнать, что компилируется в загрузчик (какие исходные файлы)?
Похоже, что так. Тут никто не в силах объяснить вам как происходит старт в обычных MCU - это надо писать целую книгу, хотя разновидностей как они грузятся с flash или как выбирают загрузчик не так и много.
Бывает что стартует какая-то ROM процедура (если в чипе она есть) и считывает адреса перехода из flash или сама flash подставляется в определенные адреса CPU по его старту в зависимости от установок pin-ов...
Т.к. используется СИ или C++, то задаются соответствия физических виртуальным адреса в блоки управления, включается всякое кэширование, из заданной области flash копируются данные сегментов СИ/С++ в RAM, очищается стек и прочие сегменты, обычно в startup.s ... и только потом запускается типа main()...
В процессорах с вариантами sleep, если память сохраняется используют ускоренную загрузку - по старту скипают распаковку некоторых сегментов данных в RAM и сразу стартуют не в main(), а в специальную процедуру "восстановления после сна"...
И т.д. - читайте литературу по данному поводу. Такие дела не изучают по форумным сообщениям.
 

pvvx

Активный участник сообщества
aloika пока вы всё это дело самостоятельно не изучите - говорить с вами бесполезно, можно только сделать всё за вас. Но это нехорошо ни вам ни другим.
 

nikolz

Well-known member
Вас не понять. Нет такого FLASH_DISK_START_ADDRESS ни в sdk40b, ни в sdk40b_web.
Похоже, что так. Тут никто не в силах объяснить вам как происходит старт в обычных MCU - это надо писать целую книгу, хотя разновидностей как они грузятся с flash или как выбирают загрузчик не так и много.
Бывает что стартует какая-то ROM процедура (если в чипе она есть) и считывает адреса перехода из flash или сама flash подставляется в определенные адреса CPU по его старту в зависимости от установок pin-ов...
Т.к. используется СИ или C++, то задаются соответствия физических виртуальным адреса в блоки управления, включается всякое кэширование, из заданной области flash копируются данные сегментов СИ/С++ в RAM, очищается стек и прочие сегменты, обычно в startup.s ... и только потом запускается типа main()...
В процессорах с вариантами sleep, если память сохраняется используют ускоренную загрузку - по старту скипают распаковку некоторых сегментов данных в RAM и сразу стартуют не в main(), а в специальную процедуру "восстановления после сна"...
И т.д. - читайте литературу по данному поводу. Такие дела не изучают по форумным сообщениям.
Для начала можно читать учебники, а не заниматься ползучим эмпиризмом.
 

Simon

Member
Почему не хотите сразу перейти к BW-16 - AmebaD ?
Я бы вот с радостью, но ног мало вывели! РТЛ крут многочисленной переферией, которую можно использовать одновременно. В одном проекте у меня например одновременно 3 uart, spi, и второй spi в качестве генератора импульсов, это не считая пинов для выбора загрузки и всяких моргалок. Почему не сделали хотя бы аналогично rtl00, не понятно. Лень стало с платой возиться, видимо. Жду не появятся ли другие модули, но из дешевых врятли.
SDK и Arduino рабочие
Кстати в сдк 7.1 вроде как предусмотрена возможность сборки для Ameba0(и вообще для всех амеба). Никто не пробовал?
 

pvvx

Активный участник сообщества
Я бы вот с радостью, но ног мало вывели! РТЛ крут многочисленной переферией, которую можно использовать одновременно. В одном проекте у меня например одновременно 3 uart, spi, и второй spi в качестве генератора импульсов, это не считая пинов для выбора загрузки и всяких моргалок. Почему не сделали хотя бы аналогично rtl00, не понятно. Лень стало с платой возиться, видимо. Жду не появятся ли другие модули, но из дешевых врятли.
Потому, что чипы RTL872xDx в разных корпусах. Есть много ног, есть мало...
Реле или лампочку включать одной ноги хватит.
https://aliexpress.ru/item/1005001884746947.html
+
https://developer.tuya.com/en/docs/...module/wr-series-module/wr3e-module-datasheet
+
 

Simon

Member
Да полно там еще портов в самом маленьком. UART0 легко могли бы вытащить. Ртл00 же по геометрическому расположению выводов повторяет есп12. Странно, что перестали так делать. Кроме как ленью непонятно, чем это объяснить.

1613722909254.png
 
Сверху Снизу