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

Serega Doc

Свой
  • Постов

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

  • Посещение

Весь контент Serega Doc


  1. Срочно продам. Возможен торг.
  2. Доброго всем времени суток. Нашел у себя в заначке плату SAM7-EX256. Абсолютно новая (пару раз меняли тестовую прошивку). Подробности конфигурации платы: Отладочная плата фирмы OLIMEX. Установлен микроконтроллер AT91SAM7X256 ARM7TDMI-S. Плата позволяет разработчику загружать через порт USB или RS-232 пользовательскую программу, подключать внешний JTAG-эмулятор. На плате установлены все необходимые для быстрого старта компоненты. микроконтроллер AT91SAM7X256: ARM7TDMI-S™ 16/32 бит, 256кБ Flash-памяти программ, 64кБ ОЗУ, Ethernet 10/100, USB 2.0, CAN, часы реального времени, 10-битный АЦП 384ksps, ЦАП, 2 порта UART, I2C (TWI), SPI, три 32-битных таймера, SSC, DMA, ШИМ (четыре выхода), «WatchDogTimer», 5В совместимые входы/выходы, работоспособность до 60МГц (встроенный PLL); 18,432МГц кварцевый резонатор; JTAG-коннектор 2x10 пин, ARM-JTAG (Wiggler) совместимый; 128x128 TFT 12 бит цветной ЖКИ; Ethernet 10/100 PHY на базе KSZ8721BL; держатель карт MMC/SD; два порта RS-232 и USB интерфейс; аудио-интерфейс: стерео вход (микрофон) и стерео выход на наушники; две пользовательские кнопки и джойстик; напряжение питания 9V DC, 6V AC; термистор, подключённый к АЦП; разъём для внешнего источника питания; установленный регулятор на 3,3В с выходным током до 800 мА; свободные выводы микроконтроллера доступны на IDC разъёмах; размеры: 128 x 98мм Новая стоит порядка 160$ Свою отдам за 100$ или 800 грн. Я нахожусь в Одессе - Украина. Тел: 067 488 75 44 E-mail: [email protected]
  3. - поясните пожалуйста. Не понял что имеется в виду. Тестирование в не целевом окружении возможно лишь для задач не зависящих от железа как Если же существует контроллер с обвеской: регистры, ключи, кнопки, LCD экраны и прочее. И тестирование нужно проводить с учетом нюансов электронной схемы. Подскажите насколько правильна вот такая структура формирования тестов: И тогда можно получать информацию о прохождении тестов либо в симуляторе (например Протеус) либо в реальной плате + терминал COM порта.
  4. А вы под какую платформу используете googletest? И как вы интегрировали эти тесты с компилятором для железа? Что бы запускать их непосредственно из среды в которой пишем программу. Если можно то по подробнее пожалуйста.
  5. Доброго всем дня. Наткнулся на статьи Развитие в направлении разработки встроенных систем и Эффективная разработка встроенного ПО через тестирование про модульное тестирование для встроенных систем. Хочу уточнить есть unit тесты и mock объекты для компиляторов под AVR/STM8? Что бы свою программу на с++ можно было покрывать тестами. Вести разработку ПО максимально отделив логику от уровня железа. И при этом не испытывать проблем или же минимизировать вопросы перехода с одной платформы на другую. Как например есть программа для контроллера AVR и по каким либо причинам (дефицит, цена, характеристики) решили перейти на STM8. Переписываем классы взаимодействия с аппаратурой контроллера и в минимальные сроки получаем работоспособную (не проваливающую тесты) программу.
  6. Можно и два списка по 32. Вопрос не в этом. Обычно на spi все регистры висят последовательно. Как два списка будут работать с одной колбаской из 8-ми регистров? скажем даже так есть два регистра IN и два OUT. Можно ли описать их двумя списками по 16 бит, но при этом что бы списки по SPI работали каждый со своими регистрами?
  7. to neiver Добрый день. Можешь посоветовать как описать набор из n регистров 74HC595(выходы) и 74HC597(входы) для работы с произвольными pin этого набора. Если в связке будет до 8 регистров или 64 входа/выхода в зависимости от конкретной схемы. В статье описано как работать с одним регистром. А вот как описать пины для большей разрядности не понятно. Заранее спасибо. .... Кажется понял template<class ClockPin, class DataPin, class LatchPin, unsigned ID, class T = uint8_t> class ThreePinLatch { public: typedef T DataT; // нужен для сортировки портов в списках линий enum{Id = ID}; //разрядность регистра enum{Width=sizeof(DataT)*8}; // запись значения static void Write(T value) { _currentValue = value; for(uint8_t i=0; i < Width; ++i) { DataPin::Set(value & 1); ClockPin::Set(); value >>= 1; ClockPin::Clear(); } LatchPin::Set(); LatchPin::Clear(); } static DataT Read() { return _currentValue; } static void ClearAndSet(DataT clearMask, DataT value) { Write(_currentValue = (_currentValue & ~clearMask) | value); } static void Set(DataT value) { Write(_currentValue |= value); } static void Clear(DataT value) { Write(_currentValue &= ~value); } static void Togle(DataT value) { Write(_currentValue ^= value); } static void DirWrite(DataT value) { /*не можем менять направление*/ } static DataT DirRead() { return 0xff; //всегда выход } static void DirSet(DataT value) {/* не можем менять направление */} static void DirClear(DataT value) {/* не можем менять направление */ } static void DirTogle(DataT value) {/* не можем менять направление */} protected: // текущее значение в регистре static DataT _currentValue; }; template<class ClockPin, class DataPin, class LatchPin, unsigned ID, class T> T ThreePinLatch<ClockPin, DataPin, LatchPin, ID, T>::_currentValue = 0; и объявление из статьи typedef ThreePinLatch<Pa0, Pa1, Pa3, 'R1'> ShiftReg1; typedef TPin<ShiftReg1, 0> Rg0; typedef TPin<ShiftReg1, 1> Rg1; typedef TPin<ShiftReg1, 2> Rg2; typedef TPin<ShiftReg1, 3> Rg3; typedef TPin<ShiftReg1, 4> Rg4; typedef TPin<ShiftReg1, 5> Rg5; typedef TPin<ShiftReg1, 6> Rg6; typedef TPin<ShiftReg1, 7> Rg7; но можно же определять сдвиговый регистр как typedef ThreePinLatch<Pa0, Pa1, Pa3, 'R1', unsigned long> ShiftReg1; typedef TPin<ShiftReg1, 0> Rg0; typedef TPin<ShiftReg1, 1> Rg1; typedef TPin<ShiftReg1, 2> Rg2; typedef TPin<ShiftReg1, 3> Rg3; typedef TPin<ShiftReg1, 4> Rg4; typedef TPin<ShiftReg1, 5> Rg5; typedef TPin<ShiftReg1, 6> Rg6; typedef TPin<ShiftReg1, 7> Rg7; ... typedef TPin<ShiftReg1, 27> Rg27; typedef TPin<ShiftReg1, 28> Rg28; typedef TPin<ShiftReg1, 29> Rg29; typedef TPin<ShiftReg1, 30> Rg30; typedef TPin<ShiftReg1, 31> Rg31; И немного переписать методы DataT Read() и void Write(T value) что бы обновлялись регистры значениями из переменной _currentValue и наоборот. Но тогда не вижу как можно сделать больше чем 32 пина?
  8. Решил все сделать через указатель на функцию. Огромное спасибо. Только вопрос в чем разница между кодом как привели Вы: class Bar { public: Bar(WriteFuncPtr func) :_func(func) {} и кодом который работает аналогично только занимает на 10 байт больше: class Bar { public: Bar(WriteFuncPtr func) { _func = func; } И если я передаю в конструктор два указателя на функцию. Как это описать?
  9. Добрый день. Есть вопрос по С++. В этом топике выше подымалась тема библиотеки статических классов по управлению портами. При работе с этой библиотекой возник вопрос. Можно ли различные списки пинов привести к какой либо ссылке что бы в классе который реализует одинаковую логику но для разных списков использовать просто указатель на список. Пример чего хочу: typedef PinList <Pb6, Pb7> TestList1; typedef PinList <Pb4, Pb5> TestList2; template <class lst> class A { public: unsigned char Read(void) { lst::Read(); } } class B { public: B(A *ptrA)(pA = ptrA;) unsigned char Calc(void) { unsigned char data; data = pA->Read(); // преобразования data; return data; } private: A *pA; } Но ничего не выходит потому что указатель класса B объявлен без списка параметров. Пока реализовал класс B с шаблоном по списку пинов, но не устраивает что несколько членов-методов которые работают с данными из шаблона дублируются столько раз сколько раз я определяю шаблон. Есть ли выход из данной ситуации. Или это оптимальное решение. Все компилирую на IAR.
  10. Спасибо большое. JMP изящнее на мой взгляд чем просто переходное отверстие с жестко нарисованной перемычкой. В таком вариате в процессе трассировки есть возможность выбора где проводить перемычку в TOP или BOTTOM. Лучше не получится.
  11. Добрый день. Я могу купить на радио базаре Реле NPA-5A-DC12V и NPA2-5A-DC12V (pdf в приложении) Эти реле отличаются только положением одного вывода на корпусе. Можно ли нарисовать патерн что бы в нем два пада считались одним выводом в компоненте. Что бы не зависимо от того какое из реле есть в наличии спокойно паять на плату. Как вариант решил в патерн добавить переходное отверстие и к нему подвести дорожку от того пада который уже есть. Но мне кажется что это кривое решение. Подскажите как правильно p_npa_as5_05.pdf
  12. Спасибо за рекомендации. inline я активно использую в header файле. И для данной функции это бессмысленно из-за дублирования кода. Я в принципе тоже так думал что нет такой возможности. Но надеялся что я чего-то не ведаю. Еще раз спасибо.
  13. Добрый день. Неожиданно был удивлен что здесь из-за такого вопроса получился холивар. Считаю что разработчик сам должен для себя решить на каком языке и с какой эффективностью он будет реализовывать проект. Так что считаю вообще спор бессмысленным. И прошу его прекратить. И если можно ответить еще на один вопрос. Можно ли каким либо образом сделать переход из одного метода класса в другой не вызовом его через Call а переходом через Jmp. Вернее что бы компилировалось так. А то сейчас у меня два метода которые возвращают один и тот же тип WatcherState Но при этом один просто выполняет проверки и возвращает значение Второй же более длинный по времени выполнения выполняет расчет и так же возвращает WatcherState Вот как я это пока написал if (Tvalue == TimerValue) { return Next(); } else { return WAIT; } Что можете посоветовать?
  14. Спасибо все заработало. Что бы не плодить тем буду в будущем писать сюда по вопросам проектирования. Жаль что мне самому не пришла идея использовать указатель на SPI.
  15. Это глупый вопрос который обсуждали миллион раз?
  16. Добрый день. Учусь программировать на С++. И иногда возникают вопросы в правильном проектировании классов. Сейчас описываю класс для работы с последовательными регистрами 74HC595. Уже есть класс для работы с SPI. Где инициализировать SPI блок AT Mega 168 в классе работы с регистром или же глобально во всей программе. Сейчас SPI будет использоваться только в регистрах. Но в будущем планирую параллельно регистрам подключить еще и FLASH память (еще один класс по работе с памятью FLASH) на SPI. Что посоветуете? Вдогонку PS И как правильно писать классы для регистров и FLASH наследовать от SPI или же внутри классов объявлять член класса SPI?
  17. Добрый день. По мотивам предыдущего поста написал работу с портом для АТМеги как с объектом (в приложении) Смущает очень сильно быстродействие того что я написал (с++ только начинаю изучать так что прошу совета как писать правильно). Инициализация объекта: portio pb (IOPORTB, IODDRB, IOPINB); // 130 тактов LOW, 129 MEDIUM и 25 HIGH оптимизация не зависит от вида по скорости или по объему. Перевод порта в Z состояние pb.portz(); // 65-LOW 64-MEDIUM 17-HIGH Можно ли писать более оптимально по скорости изначально? И как написать конструктор структуры что бы не было холостой инициализации на нулевой адрес? M48M88M168.zip
  18. Вот что с оптимизацией 13 void Set_Port(uchar PortNumber, uchar BitNumber) ??Set_Port: // 14 { // 15 *((uchar*)PortNumber) |= BitNumber; MOV R30, R16 LDI R31, 0 LD R16, Z OR R16, R17 REQUIRE ?Subroutine0 ; // Fall through to label ?Subroutine0 // 16 } RSEG CODE:CODE:NOROOT(1) ?Subroutine0: ST Z, R16 RET // 17 Но операция ST Z, R16 никогда не будет оптимизироваться в OUT 0x18, R16 Первое работа с ОЗУ второе с I/O. Так что описанный выше метод вообще не подходит. Да и врядли вообще можно написать что то требуемое потому как в ассемблере IN и OUT конструкции используются с константой и в них номер регистра вообще нельзя передать. Так что нужно писать таблицу типа и делать переходы на эти метки или как то с помощью кейсов описывать. Иначе на мой взгляд никак. ??RD_PORTB IN 0x18,R16 RET; ??RD_PORTC IN 0x15,R16; RET;
  19. Попробовал вашу конструкцию вот что вышло в процессе компиляции в IAR 5.5 без оптимизации void Set_Port(uchar PortNumber, uchar BitNumber) ??Set_Port: // 36 { // 37 *((uchar*)PortNumber) |= BitNumber; MOV R30, R16 LDI R31, 0 LD R18, Z OR R18, R17 ST Z, R18 // 38 } RET // 39 RSEG CODE:CODE:NOROOT(1) // 40 void Clr_Port(uchar PortNumber, uchar BitNumber) ??Clr_Port: // 41 { // 42 *((uchar*)PortNumber) &= ~BitNumber; MOV R18, R17 COM R18 MOV R30, R16 LDI R31, 0 LD R19, Z AND R19, R18 ST Z, R19 // 43 } RET // 44 // 45 RSEG CODE:CODE:NOROOT(1) // 46 int main() main: // 47 { // Пример работы с портом // 48 PORTB = 10; LDI R16, 10 OUT 0x18, R16 // 49 PORTB++; IN R16, 0x18 INC R16 OUT 0x18, R16 // 50 // Ваши процедуры // 51 Clr_Port(porta, bit); LDI R17, 1 LDI R16, 24 RCALL ??Clr_Port // 52 // 53 Set_Port(porta, bit); LDI R17, 1 LDI R16, 24 RCALL ??Set_Port // 54 // 55 // 56 return 0; LDI R16, 0 LDI R17, 0 RET REQUIRE _A_PORTB // 57 } Что то тут не то :(
  20. Умный дом.

    А к чему лежит? Я пока нашел построение таких вещей только в Zig Bee И еще вопрос периемо передатчик который я преводил выше можно применять для Zig Bee. Диапазон вроде совпадает?
  21. Умный дом.

    У меня возник вопрос как нужно реализовывать управление что бы при отказе автоматического исполнительного устройства оставалось ручное управление? В качестве среды думаю самое актуальное радио (не нужно долбить стены) или RS-485 (много устройств автоматизации работает на MODBUS). В плане дешового радио поднималась тема тут на форуме Оттуда взял вот этот передатчик возник вопрос для "Умного дома" как реализовать маршрутизацию пакета при малой дальности передачи в помещении: Если есть пять точек одна видит до двух соседей как от первого передать пакет пятому 1-2-3-4-5 1 видит 2 и 3 2 видит 1, 3 и 4 3 видит всех ... 5 видит 3 и 4
  22. Добрый день. Согласен поучавствовать в проекте. С пиками не работал но есть знания Атмел. Подробности на моей страничке
  23. Доброго дня. Вставлю и свои 5 коп. Вопросы к автору топика - назначение и область применение ОС? Существует микроконтроллер с малым объемом ОЗУ (ATTiny44) потому как во все более меньшие контроллеры ниче и так толковое не влезет не говоря уже о многопоточности. Имеется в виду как ОЗУ так и FLASH программ. Поэтому и Деспетчиризацию в таком контроллере можно использовать круговую. И отрабатывать события только необходимых аппаратных блоков. И в силу малого объема ОЗУ синхронизации потоков и межпотоковое взаимодействие не реализовывать. Ну а в контроллер по мощьнее (например: ATMega 128) нужно в зависимости от задачи применять необходимый набор опций. Это могут быть и приоритеты у потоков и различные механизмы межпотокового взаимодействия (мьютексы, семафоры и др...)
  24. А что вы имеете в виду под прямым и обратным преобразованием сигнала?
×
×
  • Создать...