igorle
Свой-
Постов
337 -
Зарегистрирован
-
Посещение
Весь контент igorle
-
"будильник" будет стоять в жилой комнате.Так что фон будет какой угодно. И телевизор, и разговоры, и шум за окном. Расстояние до источника звука тоже может варьироваться. В идеале - как мы ухом распознаем звонок даже из другой комнаты - так хотим распознавать и контроллером. Похоже, что моя главная проблема - принять сигнал с микрофона и подстроить уровень для ADC? Есть ли для этого готовые популярные микросхемы? Или правильнее в моем случае - строить аналоговый узкополосный фильтр, и уже с него сигналы заводить в контроллер?
-
У нас на фирме приняты правила, совпадающие с НАСАвскими. 1. Любой хедер может быть использован без предварительного инклюда 2. Если хедер зависит от разных файлов в различных компиляциях - то эта зависимость должна быть собрана в файле. Например, мой фал может быть использован и в Кернеле, и в Юзер моде. Тогда делаем что-то вроде: #ifdef __KERNEL__ #include <kernel_types.h> #else #include <user_types.h> #end u32 foo(s16); 3. Исключения допускаются, но программист должен быть в состоянии объяснить, для чего он вводит эту зависимость.
-
Я понял, что вычислительных возможностей даже MSP430 достаточно. Верно? Но ведь надо еще подготовить сигнал с микрофона. Оценить уровень сигнала. В документе от TI считается чть сигнал уже отрегулирован по уровню В АОНЕ входной сигнал тоже уже более менее с известным уровнем. Как эта часть решается современной базой?
-
Распознавание аварийного звукового сигнала
igorle опубликовал тема в В помощь начинающему
Не знаю, где правильнее задавать такой вопрос - здесь или в DSP. Есть устройство, которое время от времени подает сигнал тревоги - повторяющийся сигнал из двух чередующихся частот с паузой. Типа будильника. Вопрос - можно ли распознавать такой сигнал без специализированного процессора? Через микрофон. Желательно - силами STM32 или даже MSP430. Наверняка, проблема не оригинальная. Можете посоветовать - на какой базе можно реализовать такую задачу? Речь идет не о производстве - о демонстрации (проверке) идеи. -
непонятность с Си
igorle ответил Метценгерштейн тема в Программирование
Компилятор может давать ворнинги в случае, если встретит if (a = foo()) Поэтому принято такие конструкции обрамлять дополнительными скобками: if ((a = foo())) Таким образом компилятору и тому, кто будет читать код говорят, что это не опечатка, а так задумано. Это нормальная практика. Я сейчас забежал греп на Кернел Линукс 2.6 - насчитал таких случаев 6932. Программистам следует этот прием если не использовать (некоторым религия не позволяет писать красивый код), то как минимум знать. -
Проблемы с инициализацией или еще с чем-то
igorle ответил addi тема в Программирование
Этот вызов никакой смысловой нагрузки не несет. Поэтому я его и предлагал вычистить. Подозреваю, что проблема не в коде, а в окружении. На начальных этапах это сплошь и рядом бывает. Думаешь, что прожег код, а на самом деле загрузил его в эмулятор. Или вообще никуда... -
Проблемы с инициализацией или еще с чем-то
igorle ответил addi тема в Программирование
Я по существу ответить не могу. Под рукой нет ничего. Но для начала - я бы причесал код. Чтобы было видно, что вы понимаете что делаете. Например, Ваш код насамом деле выглядит так: #include <msp430x14x.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; P3DIR |= 0x40; // P3.6 P4DIR |= 0x20; // P4.5 P3OUT |= 0x40; // P3.6 P4OUT |= 0x20; // P4.5 for(;;); } Я бы еще проверил значения PxSEL. Возможно, эти ножки по умолчанию не GPIO, а альтернативные. Я, к сожалению, не смог этого понять из даташита. -
Навигация в Кейле
igorle ответил igorle тема в ARM, 32bit
Другими словами - когда я перехожу из одного таба в другой, мне хотелось бы, чтобы оставленный файл был в соседнем табе. Желательно - справа от текущего (как это работает в Alt TAB при переключении между окнами) Или в крайнем случае - я хочу иметь возможность менять порядок табов. Я постоянно переключаюсь между двумя файлами. Исторически сложилось, что они не рядом. И я постоянно должен или тыкать мышкой, или перебирать по пути массу других файлов :( -
Я полагал, что внутри SD карт и флэшэк используют NAND память. Она дешевая, но менее надежная. Надо следить за сбойными блоками, восстанавливать данные и заботиться о равномерном износе. Я остановился на SD карте для своего проекта, так как внутри карты не только память, но и контроллер, который выполняет всю эту грязную работу. Если речь, как у меня, идет не о промышленности, а о небольшом числе самоделок, то можно и подпаяться к панелькам карты.
-
Навигация в Кейле
igorle ответил igorle тема в ARM, 32bit
Нет. Я плохо излагаю свою мысль. Эти две команды перебирают табы по порядку. Когда я перепрыгиваю на открытый ранее файл - это обычно не файл справа. Поэтому CTRL + SHIFT + TAB не поможет. -
STM32 I2C + Keil Странности с адресом
igorle ответил RiseOfDeath тема в ARM, 32bit
Получили противоречие. ТС желает, чтобы адрес всегда был адресом, а для семибитного случая код сам пододвигал его на бит влево. И вы его поддержали. А теперь сетуете, что библиотека содержит избыточной код. И отказались вы от библиотеки именно из-за ее избыточности... Я понимаю, когда речь идет о действительно сложных вещах, типа USB. Но UART, SPI и I2C - ведь можно понять за разумное время, верно? -
STM32 I2C + Keil Странности с адресом
igorle ответил RiseOfDeath тема в ARM, 32bit
ViKo спасибо. Объяснили - что именно смущает TC. До меня долго не доходило. Меня это не смущает. Невозможно разрабатывать и отлаживать устройство I2C, не зная как работает адресация. Библиотека должна быть минималистична. Но это мои личные предпочтения. (А Кейл тут вообще ни причем) -
STM32 I2C + Keil Странности с адресом
igorle ответил RiseOfDeath тема в ARM, 32bit
Почитайте еще раз про битовые поля и посмотрите RM0008, параграф 26.6.3, I2C Own address register 1 (I2C_OAR1) В моей версии РМ это страница 748. -
STM32 I2C + Keil Странности с адресом
igorle ответил RiseOfDeath тема в ARM, 32bit
Я тоже ничего странного и неочевидного не заметил. Почему пишется 2A в регистр, а поле читается 15 - вам объяснили. К STM библиотеке это не имеет никакого отношения. Так что уточните, пожалуйста, вопрос. А пока, для тренировки, разберите этот пример int main(void) { union { int word; struct { int add0:1; int add7:6; } fields; } demo; demo.word = 0x2a; printf("add7 %#x\n", demo.fields.add7); return 0; } И угадайте - какой результат будет напечатан. Проверить можно здесь -
Навигация в Кейле
igorle ответил igorle тема в ARM, 32bit
Спасибо. Уже лучше. Я в подсказках Ctrl TAB не нашел, а сам дальше Alt Tab не продвинулся. Но это все-равно не то. У меня открыты main.c и еще десять открытых файлов. Я открыл included файл, из контекстного меню. Файл расположен не в соседнем табе. И вернуться я не могу - надо пролистывать кучу файлов По вашему вопросу: - Проект как есть у меня не компилируется, так выходит за 32К демо версии кейла - Я заменил My_String на char My_String[20*1024] = "rrrrrrrrrrrrrrrrrrrrrrrrrrrr"; И проблема воспроизвелась: Program Size: Code=1136 RO-data=320 RW-data=20516 ZI-data=1636 - Я поставило в свойствах проекта (закладка Linker) Use Memory Layout from Target Dialog, и проблема разрешилась: .\test_flash_string.axf: Error: L6406E: No space in execution regions with .ANY selector matching main.o(.data). PS. Если можно - черкните в личку, где берут Кейл без ограничения демоверсии. Мой проект уже перешел 22К, так что скоро надо будет или искать правильный кейл, или на GCC переходить :( -
Навигация в Кейле
igorle опубликовал тема в ARM, 32bit
Мне в целом нравится Кейл. Но очень напрягает переход между файлами. Через короткое время открытыми оказываются уже два с лишним десятка файла. Перехода типа Альт ТАБ я не нашел. Постоянно хватаюсь за мышку и выбираю нужный фалй из длиннющего неупорядоченного списка. Горячей клавиши, чтобы вернуться в только что покинутый файл, я не нашел. Иногда выручает F12 / Ctrl- - но только при поиске по тагам. И там иногда он скачет непредсказуемо. У кого-нибудь есть красивые методы переключаться между файлами? Желательно без мышки. -
Создать массив констант по формуле
igorle ответил ViKo тема в В помощь начинающему
Меня вот это при компиляции смущает. Означает ли это, что размер массива заранее неизвестен, и только в момент компиляции вы хотите задавать? Если да, то это одна задача. Но поскольку звучит МатЛаб, то трудно поверить, что вы хотите вызывать его из Кейла. Значит считаете заранее, и используете в своем коде, как было предложено выше. Можно и руками убрать лишнюю точку с запятой. У меня была аналогичная задача с пересчетом температуры. Я расчитал таблицу на питоне, засунул в файл и использую. Так как в разных проектах диапазон температуры различен - часть массива ограничена ifdefом -
Инициализация стека STM32
igorle ответил igorle тема в ARM, 32bit
Вызовите в начале функции main маллок одного байта, поставьте там брекпоинт. Посмотрите, что вернул маллок и насколько это далеко от границы кучи. Освободите этот байт. Хочется автоматизации - аллоцируйте и осбобождайте блок памяти в цикле, добавляя по одному байту. Когда будет достигнут предел - напечатайте, или зайдите в брекпоинт. Я так понимаю, речь идет не о рабочем коде, а об отладочном - чтобы оценить достаточность кучи? -
Инициализация стека STM32
igorle ответил igorle тема в ARM, 32bit
А что такое "остаток"? Память ведь может быть фрагментирована. Сумма всех кусочков? Единственный путь, известный мне, это в нужной точке устроить крэш тест: аллоцировать память, пока не вернет ошибку. Но и это мало информации дает, так как фрагментация памяти и размер запрашиваемых блоков играют важную роль. -
Инициализация стека STM32
igorle ответил igorle тема в ARM, 32bit
2toweroff - Спасибо. Жаль что вы написали предыдущее сообщение одновременно со мною :) Теперь никто не поверит, что я сам сообразил, и написал одновремнно с вами :( И за линк спасибо. Документу уже 12 лет, а не потерял актуальности. Я сам не нашел такого хорошего руководства по линковщику. -
Инициализация стека STM32
igorle ответил igorle тема в ARM, 32bit
<Спустя полчаса> Все, спасибо всем. Дошло. Я могу отменить "Use Memory Layout..." на закладке Linker в свойствах проекта, и задать свой скаттер файл. Уже видно, что это не тривиальная задача - написать скаттер файл, но понятно куда грести. Еще раз всем спасибо. -
Инициализация стека STM32
igorle ответил igorle тема в ARM, 32bit
MAP файл нашел. Стало понятно, что за цифры я получал и почему они разные. Стек объявляется НАД всеми данными. Мне это не нравится. Ведь это означает, что если я выйду за пределы стека - то я потру свои переменные. И ловить такую ошибку очень трудно. Я бы хотел разместить стек ПОД всеми данными. Начиная с 0х20000000. Тогда при выходе за стек я получу hard fault. Вопрос - могу ли я в Кейле сказать, где должен начинаться стек? Я не нашел такого файла. Есть <target>.sct. Но он тоже автогенерится. Там есть такая секция RW_IRAM1 0x20000000 0x00005000 { ; RW data .ANY (+RW +ZI) } Возможно, если бы я мог повлиять на этот файл, я мог бы переместить стек туда, куда мне надо. -
Инициализация стека STM32
igorle ответил igorle тема в ARM, 32bit
А если Кейл - куда смотреть? -
Инициализация стека STM32
igorle опубликовал тема в ARM, 32bit
STM32F103 Keil StdPeriph. Есть два аналогичных проекта. Сравнивая потабово свойства проектов, различий не вижу. Насколько я понимаю, размер стека задается в файле startup_stm32f10x_md.s таким образом: Stack_Size EQU 0x00000400 AREA STACK, NOINIT, READWRITE, ALIGN=3 Stack_Mem SPACE Stack_Size __initial_sp ... __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DCD NMI_Handler ; NMI Handler DCD HardFault_Handler ; Hard Fault Handler DCD MemManage_Handler ; MPU Fault Handler При этом в одном проекте SP инициализируется значением 0x200004D0, в другом 0x200008F0 Вопросы: - Как образуются эти числа? Я ожидал видеть там 0x20000400 - Что находится под стеком? -
Отладка в Keil
igorle ответил muravei тема в ARM, 32bit
Спасибо. Но поскольку топик называется "Отладка в Кейл" - спрошу еще совета бывалых. Я написал некий код, который имплементирует USB. Железо не поддерживает сигнала подключения USB (не дергает программно резистор на DP). Возможно, поэтому у меня под отладчиком USB код не работает корректно. Винда не видит, когда я забегаю отлаживаемое устройство заново. Есть какие-то специальные приемы у Кейла, для отладки USB? Я, бродя по старым темам форума, натыкался на упоминания методов отладки. Но тогда не понял, а сейчас не нашел :(