Перейти к содержанию
    

natsu

Участник
  • Постов

    51
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о natsu

  • Звание
    Участник
    Участник

Информация

  • Город
    Array

Посетители профиля

406 просмотров профиля
  1. Проблема в том, что OCxFE в данном случае вообще ничего не меняет - ширина импульса просто зависит от CCR. Если поставить CCR=1 то импульс максимально длинный с задержкой на один такт, а если CCR=ARR то импульс самый короткий (в один такт счёта) с максимальной задержкой от команды старта.
  2. Это принудительная установка выхода, без других условий. Задача стояла установить активный уровень сразу при запуске. Как обычно, понять работу по документации на 100% невозможно, нужен ещё и осциллограф. Запуск по аппаратным событиям и программно видимо принципиально отличаются...
  3. Таймер и output compare (STM32F7)

    Доброго дня, Настроил выход таймера (tim3) на выход (gpioc8) и столкнулся с тем, что включение флага OCxFE никак не влияет на работу, выходной импульс всё равно начинается с значения CCRx, хотя в документации написано что выход будет установлен сразу и независимо от результата сравнения. Баг STM32F746 или я что-то упустил? Кто-нибудь сталкивался? TIM3->CR1=TIM_CR1_ARPE | TIM_CR1_OPM; // одновибратор TIM3->CCER=TIM_CCER_CC3E; // выход в порт МК TIM3->CCMR2= TIM_CCMR2_OC3PE // требование документации | TIM_CCMR2_OC3FE // форсированый выход | TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_0; // PWM2 TIM3->PSC=(ValueTIM1/10000)-1; // 10 кГц (0,1 мс) TIM3->ARR=10-1; // 1 мс TIM3->CCR3=1; // --------- без этого никак! но почему? --------- TIM3->EGR=TIM_EGR_UG; // запись конфигурации ... ... TIM3->CR1=TIM_CR1_ARPE | TIM_CR1_OPM | TIM_CR1_CEN;
  4. Не знаю. Но логично предположить что это период сбора мгновенных значений, хотя логика это не про сподэс...
  5. -- the exception response pdu exception-response [216] IMPLICIT ExceptionResponse, 25.05.2021 19:51:21.789 |-- APPL_IDLE_N1: Обмен данными в не ассоциированном состоянии прикладного уровня. 25.05.2021 19:51:21.793 |-- Перевод прикладного уровня в не ассоциированное состояние. 25.05.2021 19:51:21:820 |-- Запрос. 7E A0 08 02 19 21 53 65 57 7E 25.05.2021 19:51:21:919 |-- Ответ. 7E A0 08 21 02 19 1F C2 A1 7E 25.05.2021 19:51:21:952 |-- Запрос. 7E A0 08 02 19 21 93 69 91 7E 25.05.2021 19:51:22:065 |-- Ответ. 7E A0 1F 21 02 19 73 34 8C 81 80 12 05 01 80 06 01 80 07 04 00 00 00 01 08 04 00 00 00 01 53 3B 7E 25.05.2021 19:51:22.066 |-- РЕЗУЛЬТАТ: УСПЕХ. 25.05.2021 19:51:22.076 |-- Чтение логического имени объекта текущей ассоциации. 25.05.2021 19:51:22:108 |-- Запрос. 7E A0 1A 02 19 21 10 32 85 E6 E6 00 C0 01 C0 00 0F 00 00 28 00 00 FF 01 00 68 2C 7E 25.05.2021 19:51:22:244 |-- Ответ. 7E A0 10 21 02 19 30 57 96 E6 E7 00 D8 01 01 3C 43 7E 25.05.2021 19:51:22.250 |-- Operation not possible. 25.05.2021 19:51:22.250 |-- РЕЗУЛЬТАТ: НЕУДАЧА. 25.05.2021 19:51:22.250 |-- ВЕРДИКТ: УСПЕХ.
  6. Я отвечаю D8,1,1 Стандарт (если сподэс/dlms вообще можно называть стандартом) говорит что надо игнорировать или отвечать исключением...
  7. это не внутренняя ошибка, а реакция программы на непредусмотренный ответ прибора. По выводимой диагностике обычно можно понять что было не так в данных
  8. Причем тут размер.. Ошибка то вполне конкретная. Вот ПРОЕКТ из одного файла: #include <stdint.h> typedef struct {double energy[2][3];uint16_t mask;} __attribute__((packed)) zagprof_t; typedef struct {uint32_t stamp;float data[16];} __attribute__((packed)) datprof_t; int main(){ struct my { __attribute__((aligned (8))) zagprof_t zag; // char pad1[6]; __attribute__((aligned (8))) datprof_t dat; // char pad2[4]; __attribute__((aligned (8))) double energynow[2][3]; }; static struct my qq; struct my *mem=&qq; mem->energynow[0][0]=0; while(1);} Build started: Project: qq *** Using Compiler 'V6.15', folder: 'C:\Keil_v5\ARM\ARMCLANG\Bin' Build target 'Target 1' main.c(10): warning: padding struct 'struct my' with 6 bytes to align 'dat' [-Wpadded] __attribute__((aligned (8))) datprof_t dat; ^ main.c(12): warning: padding struct 'struct my' with 4 bytes to align 'energynow' [-Wpadded] __attribute__((aligned (8))) double energynow[2][3]; ^ 2 warnings generated. compiling main.c... linking... Program Size: Code=372 RO-data=472 RW-data=0 ZI-data=1632 ".\Objects\qq.axf" - 0 Error(s), 2 Warning(s). Build Time Elapsed: 00:00:00
  9. оптимизацию пробовал и O0 и другие, разницы нет \fdata.c(325): warning: unknown pragma ignored [-Wunknown-pragmas] #pragma GCC push_options ^ \fdata.c(326): warning: unknown pragma ignored [-Wunknown-pragmas] #pragma GCC optimize ("Ofast") ^
  10. и от предупреждений компилятора этот метод не спасает. Чтобы убрать предупреждения придется все равно вручную приделывать паддинги.
  11. Попробую угадать. Вы про макрос которые создает две структуры - упакованную и неупакованную? Не устраивает тем что рано или поздно укажу не ту структуру которую надо и потом это обнаружить и исправить будет нелегко
  12. Неупакованные Невыровненные данные? Устраивает. Но с упаковкой и выравниванием надо тему закрыть, а значит сначала разобраться.
  13. именно восьми. А вообще то в жизни 50 байт. Мне надо знать размер структуры чтоб считывать массив структур из хранилища, где они хранятся упакованными. А вот считанную структуру для обработки хотелось бы хранить по выровненному адресу. Вся проблема была в том, что структур несколько и хотелось бы иметь место в памяти, где структуры могут находиться выравненными. При этом очень хочется, чтобы каждая структура была описана один раз в системе, без всяких там отдельно упакованных и отдельно неупакованных вариантов одной структуры.
×
×
  • Создать...