• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

RTL+OpenOCD+STLinkV2

pvvx

Активный участник сообщества
Т е правильно ли я вас понял (поправьте если , не понял)
что при работе CPU на 83 MHz без WIFI составляет 55 ма (по моим замерам 67 ма)
Вы опровергаете даташиты на чип? (И весь мир ARM, закрепивший и доказавший эффективность своего ядра в сравнении с другими) :)
Вы уверены, что у вас 83 MHz на чипе?
ESP8266 при 80MHz валит за 70 мА. Если использовать его команду отключения CPU до прерывания, то выходит более 7 мА на ней. Она использована в ets_run() у ESP.
В вашей программе не вижу использования команд понижения потребления.
Сядьте и изучите как работают CPU, системы их команд, построение операционных систем, перед тем как строить сравнения.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Т е RTL8710 потребляет 7 ма в режиме прерывания от внешнего пина т е когда CPU отключено верно?
Нет.
Для таких вариантов используют другие фичи чипа, которые в нем есть, в отличии от ESP8266.
Вам уже написал - вы неверно подходите к измерениям и сравнениям. Это проблем у вас от жизни с ESP. Тут другой CPU и чип и он имеет большие варианты возможностей реализации разных нужных вещей. Не зацикливайтесь на ESP.
Не все алго что хорошо на ESP хорошо на RTL и наоборот. У RTL просто больше вариантов.

Самое простое, чтобы не впадать в сложные описания:
На RTL можно переключить частоту CLK до пары MHz на ходу, а в ESP - нет. И это переключение занимает несколько тактов CPU.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Вы как всегда пошли в демагогию.
Не отвлекайтесь.
Да идите ка вы нафиг. :p

Пример проги я дал Модуль WIFI по Вашим словам отключен. а ток фигачит 67 ма.
У ESP в таком режиме 14 ма.
что не так?
Ваш непробиваемый тупизм и неумение делать замеры и ставить адекватные сравнения.
В ESP вы используете операционную систему, стартующую по умолчанию. Она работает исполняя в ets_run() команду отключения CPU до прерывания.
В случае с RTL вы запустили CPU на 166 MHz и не включали никакой операционки и команд понижения потребления или остановки CPU.
Так вот вы и делаете все сравнения и замеры, чисто на лжи. :p

Читайте внимательнее - ARM CPU RTL серии "A" и ESP8266 на одинаковой частоте имеют одинаковое потребление. ARM выигрывает в нескольких командах для его CPU.
Всё остальное - это наличие доп. фич в самом чипе. У RTL их больше.

Вы прекрасно доказали свою зависимость от алго ESP. По другому уже мыслить даже не можете :p
Еспэшность головного мозгу? :) :)
А у нас тут уже новые CPU повсеместно...
У меня комп в режиме активности всего потребляет за 800 Вт, а при ожидании "просыпания" - до 7 Вт (тут точно не измерял - там зависит от кол-ва устройств активации :) ).

PS: Вас опять прокатил Rebane подкинув свой пакет сборки :) Даже частоту CPU своего модуля не знаете, а уже строите сравнения и заключения. :)
По вашему выходит, что ESP8266 потребляет 14 мА. В идентичных условиях у RTL"A" 7 мА
 
Последнее редактирование:

pvvx

Активный участник сообщества
Специально для вас измерил потребление модуля ESP8266 с активным CPU.
Вышло 47.8 mA - копирование памяти.
Я Вас правильно понял, что ток потребления 67 ма - это с выключенным WiFi
Программа теста такая:
Код:
#include <stdint.h>
#include <stdio.h>
#include "cortex.h"
#include "rtl8710.h"
#include "mask.h"
#include "serial.h"

volatile uint32_t timer;
void timer_init(){
    cortex_interrupt_disable(TIMER0_INT);
    timer = 0;
    PERI_ON->SOC_FUNC_EN |= PERI_ON_SOC_FUNC_EN_GTIMER; // enable timer peripheral
    PERI_ON->PESOC_CLK_CTRL |= PERI_ON_CLK_CTRL_ACTCK_TIMER_EN; // enable clock for timer peripheral
    PERI_ON->PESOC_CLK_CTRL |= PERI_ON_CLK_CTRL_SLPCK_TIMER_EN;
    TIMER->TIM0_LOAD_COUNT = 0xFFFF; // this is the value that the timer counter starts counting down from
    TIMER->TIM0_CONTROL = TIMER_CONTROL_MODE; // 1 - user-defined count mode, 0 - free-running mode
    TIMER->TIM0_CURRENT_VALUE = 0x7FFF; // start value
    TIMER->TIM0_CONTROL |= TIMER_CONTROL_ENABLE; // enable timer0
    cortex_interrupt_set_priority(TIMER0_INT, 0);
    cortex_interrupt_clear(TIMER0_INT);
    cortex_interrupt_enable(TIMER0_INT);
}

int main(){
    uint8_t c;
    uint32_t delay, uptime;
    PERI_ON->CPU_PERIPHERAL_CTRL |= PERI_ON_CPU_PERIPHERAL_CTRL_SWD_PIN_EN; // re-enable SWD
    PERI_ON->PESOC_CLK_CTRL |= PERI_ON_CLK_CTRL_ACTCK_GPIO_EN | PERI_ON_CLK_CTRL_SLPCK_GPIO_EN; // enable gpio peripheral clock
    PERI_ON->SOC_PERI_FUNC1_EN |= PERI_ON_SOC_PERI_FUNC1_EN_GPIO; // enable gpio peripheral

    delay = uptime = 0;
    timer_init();
    serial_init();
    mask32_set(SYS->CLK_CTRL1, SYS_CLK_CTRL1_PESOC_OCP_CPU_CK_SEL, 1); // set system clock
    PERI_ON->GPIO_SHTDN_CTRL = 0xFF;
    PERI_ON->GPIO_DRIVING_CTRL = 0xFF;
    GPIO->SWPORTA_DDR |= GPIO_PORTA_GC4;
    interrupts_enable();

    while(1){
        if(delay++ > 1000000){
            GPIO->SWPORTA_DR ^= GPIO_PORTA_GC4;
            printf("UPTIME: %lu, TIMER: %u\n", (unsigned long int)++uptime, (unsigned int)timer);
            delay = 0;
        }
        if(serial_read(&c, 1)){
            if(c == '1'){
                printf("COMMAND 1\n");
            }else if(c == '2'){
                printf("COMMAND 2\n");
            } // ... etc
        }
    }
}

ssize_t write_stdout(const void *buf, size_t count){
    size_t i;
    for(i = 0; i < count; i++){
        if((((uint8_t *)buf)[i]) == '\n')while(!serial_write("\r", 1));
        while(!serial_write(&(((uint8_t *)buf)[i]), 1));
    }
    return(count);
}

CORTEX_ISR(TIMER0_INT){
    timer++;
    (void)TIMER->TIM0_EOI; // reading from this register clears the interrupt
    cortex_interrupt_clear(TIMER0_INT);
}
Ваш пример на rtlDuino:
Код:
#include <GTimer.h>
#include <iostream>
using namespace std;

uint64_t counter;

void myhandler(uint32_t data) {
  counter++;
}

void setup() {
  GTimer.begin(0, 1 * 1000 * 1000, myhandler);
}

void loop() {}

void serialEvent() {
  uint8_t c = Serial.read();
  if (c == '1') {
    cout << "COMMAND 1" << endl;
    sys_info();
  } else if (c == '2') {
    cout << "COMMAND 2" << endl;
    cout << "Counter: " << counter << endl;
  } // ... etc
}
logUART (после загрузки ввел в монитор "1" и потом "2"):
Код:
Init Heap Region: 0x10003000[12288]
Init Heap Region: 0x10025f10[303344]
Init Heap Region: 0x30000120[2096864]
COMMAND 1

CLK CPU         166666666 Hz
RAM heap        2344280 bytes
TCM heap        64768 bytes
COMMAND 2
Counter: 3
Потребление 29.66 mA:
Снимок83.gif
(Там где провал до 24 мА - это был вывод сообщения по вводу в Uart символа, как вы и задумывали...)
Модуль RTL8711AM (166MHz, 2.5MB RAM)

PS: к сожалению на ESP8266 не проверить данный скетч, т.к. Arduino у ESP8266 не поддерживает С++ и вообще не может распечатать uint64_t никакими стандартными процедурами из SDK или Arduino.
PS2: Измерил потребление ESP8266 с выключенным WiFi блоком при активном CPU - вывалиивает за 47 мА (зависит от того, какие функции он выполняет)... Просто при удержании RESET, с выключенным WiFi, он потребляет от 22 мА...
Снимок81.gif
 
Последнее редактирование:

pvvx

Активный участник сообщества
Как там ваше
по моим замерам 67 ма
?
Проигрывание MP3-радио с сети c выводом ШИМ 2-х каналов (stereo), включенным и работающим WiFi, потребляет как раз 67 мА на 83МГц (72 мА на 166 МГц). Но там задействовано множество внутренних контроллеров с DMA и на максимальной частоте.

Для адекватного сравнения потребления самого CPU у RTL и ESP вам надо запустить тест Dhrystone Benchmark, версии 2.1. Для него есть большая база по скорости для многих MCU и SoC (для ESP - нет, наверно сикрет :), т.е. это показывает распространенность ESP в эмбедед - в сети данных на их производительность не найти).
Измерение производительности для RTL:
https://esp8266.ru/forum/threads/mo...fer-board-mjiot-amb-debug-01.2665/#post-39410
https://esp8266.ru/forum/threads/mjiot-amb-03-debug-rtl8710bn.2664/page-2#post-39469
Измерить в данном тесте потребление не сложно...
Если вам требуется малое потребление для автономных датчиков, то ESP не могут участвовать в данном выборе. Надо смотреть в сторону RTL серии "B" или вариантов WiFi-SoC от TI...
 
Последнее редактирование:

pvvx

Активный участник сообщества
У меня для ESP-12 с выключенным модулем WIFI и активным CPU ток потребления 14 ма, что соответствует документации.
Нету там такого. Ссылку на доку в студию. :)
Это в режиме DTIM() - LIGTH SLEEP при работе только Station, когда процессор не воспринимает никакие прерывания между beacon-ами (попросту отключен). И все замеры и рекламные объявления от Espressif говорят, что средний ток там всегда более 15 мА.
У вас может быть всё что угодно - это вы много раз уже приводили голословно. :)
Хоть раз возьмите стандартную плату ESP и пусть даже Arduino и приведите скетч для альтернативного подтверждения другими ваших заявок.
Наверно измерять ток потребления не умеете.
 
Последнее редактирование:

pvvx

Активный участник сообщества
CPU активен и включен таймер.
Глубоко не смотрел,
но для RTL8710 ровно такой же тест дал 67 ма.
С включенными всеми контролерами, завышенным внутренним напряжением (есть регистры их управления и правильная SDK ставит их в надлежащие значения) и на частоте, не соответствующей документации на на данный чип (оверклок в 2 раза). Вас предупреждал - не пользуйтесь пакетами и тем, что вам дал Rebane. Там всё не доделано, но об этом не сказано.
В таких условиях ESP8266 может показать и за 300 мА. :p
У ESP-32, если перевести ваш тест туда, вылезут пики и в 500 мА :)
----------
Если вы не понимаете что измеряете, то вот вам аналогия:
На автомобиль пишут, что он жрет (пусть) 8 литров на 100 км в городских условиях, при этом имеет бензо движок объемом за 1.2 литра. Ваш тест показывает, что на стенде его движок при максимальной нагрузке жрет от 35 литров/час и при этом не передвинется ни на метр. :)
-----
Если взялись сравнивать, то хотя-бы сделайте это в одинаковых условиях и задачах, да в операционной среде, для которой разработан чип. Применить самое неоптимальное решение для выдавливания максимального потребления можно у любого чипа.

PS: Замкните GPIO и сделайте на них КЗ, как например на ESP-01, при выводе в порт GPIO15 единички – сразу получим от 100 мА :)
 
Последнее редактирование:
Сверху Снизу