-
Постов
264 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о Serega Doc
-
Звание
Местный
- День рождения 05.10.1981
Контакты
-
Сайт
Array
-
ICQ
Array
Информация
-
Город
Array
Посетители профиля
-
Плата для разработки на ARM Olimex
Serega Doc ответил Serega Doc тема в Продам
Срочно продам. Возможен торг. -
Плата для разработки на ARM Olimex
Serega Doc опубликовал тема в Продам
Доброго всем времени суток. Нашел у себя в заначке плату 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] -
- поясните пожалуйста. Не понял что имеется в виду. Тестирование в не целевом окружении возможно лишь для задач не зависящих от железа как Если же существует контроллер с обвеской: регистры, ключи, кнопки, LCD экраны и прочее. И тестирование нужно проводить с учетом нюансов электронной схемы. Подскажите насколько правильна вот такая структура формирования тестов: И тогда можно получать информацию о прохождении тестов либо в симуляторе (например Протеус) либо в реальной плате + терминал COM порта.
-
А вы под какую платформу используете googletest? И как вы интегрировали эти тесты с компилятором для железа? Что бы запускать их непосредственно из среды в которой пишем программу. Если можно то по подробнее пожалуйста.
-
TDD для микроконтроллеров
Serega Doc опубликовал тема в GNU/OpenSource средства разработки
Доброго всем дня. Наткнулся на статьи Развитие в направлении разработки встроенных систем и Эффективная разработка встроенного ПО через тестирование про модульное тестирование для встроенных систем. Хочу уточнить есть unit тесты и mock объекты для компиляторов под AVR/STM8? Что бы свою программу на с++ можно было покрывать тестами. Вести разработку ПО максимально отделив логику от уровня железа. И при этом не испытывать проблем или же минимизировать вопросы перехода с одной платформы на другую. Как например есть программа для контроллера AVR и по каким либо причинам (дефицит, цена, характеристики) решили перейти на STM8. Переписываем классы взаимодействия с аппаратурой контроллера и в минимальные сроки получаем работоспособную (не проваливающую тесты) программу. -
Как ПРАВИЛЬНО программировать на С++
Serega Doc ответил Serega Doc тема в Программирование
Можно и два списка по 32. Вопрос не в этом. Обычно на spi все регистры висят последовательно. Как два списка будут работать с одной колбаской из 8-ми регистров? скажем даже так есть два регистра IN и два OUT. Можно ли описать их двумя списками по 16 бит, но при этом что бы списки по SPI работали каждый со своими регистрами? -
Как ПРАВИЛЬНО программировать на С++
Serega Doc ответил Serega Doc тема в Программирование
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 пина? -
Как ПРАВИЛЬНО программировать на С++
Serega Doc ответил Serega Doc тема в Программирование
Решил все сделать через указатель на функцию. Огромное спасибо. Только вопрос в чем разница между кодом как привели Вы: class Bar { public: Bar(WriteFuncPtr func) :_func(func) {} и кодом который работает аналогично только занимает на 10 байт больше: class Bar { public: Bar(WriteFuncPtr func) { _func = func; } И если я передаю в конструктор два указателя на функцию. Как это описать? -
Как ПРАВИЛЬНО программировать на С++
Serega Doc ответил Serega Doc тема в Программирование
Добрый день. Есть вопрос по С++. В этом топике выше подымалась тема библиотеки статических классов по управлению портами. При работе с этой библиотекой возник вопрос. Можно ли различные списки пинов привести к какой либо ссылке что бы в классе который реализует одинаковую логику но для разных списков использовать просто указатель на список. Пример чего хочу: 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. -
Спасибо большое. JMP изящнее на мой взгляд чем просто переходное отверстие с жестко нарисованной перемычкой. В таком вариате в процессе трассировки есть возможность выбора где проводить перемычку в TOP или BOTTOM. Лучше не получится.
-
Добрый день. Я могу купить на радио базаре Реле NPA-5A-DC12V и NPA2-5A-DC12V (pdf в приложении) Эти реле отличаются только положением одного вывода на корпусе. Можно ли нарисовать патерн что бы в нем два пада считались одним выводом в компоненте. Что бы не зависимо от того какое из реле есть в наличии спокойно паять на плату. Как вариант решил в патерн добавить переходное отверстие и к нему подвести дорожку от того пада который уже есть. Но мне кажется что это кривое решение. Подскажите как правильно p_npa_as5_05.pdf
-
Как ПРАВИЛЬНО программировать на С++
Serega Doc ответил Serega Doc тема в Программирование
Спасибо за рекомендации. inline я активно использую в header файле. И для данной функции это бессмысленно из-за дублирования кода. Я в принципе тоже так думал что нет такой возможности. Но надеялся что я чего-то не ведаю. Еще раз спасибо. -
Как ПРАВИЛЬНО программировать на С++
Serega Doc ответил Serega Doc тема в Программирование
Добрый день. Неожиданно был удивлен что здесь из-за такого вопроса получился холивар. Считаю что разработчик сам должен для себя решить на каком языке и с какой эффективностью он будет реализовывать проект. Так что считаю вообще спор бессмысленным. И прошу его прекратить. И если можно ответить еще на один вопрос. Можно ли каким либо образом сделать переход из одного метода класса в другой не вызовом его через Call а переходом через Jmp. Вернее что бы компилировалось так. А то сейчас у меня два метода которые возвращают один и тот же тип WatcherState Но при этом один просто выполняет проверки и возвращает значение Второй же более длинный по времени выполнения выполняет расчет и так же возвращает WatcherState Вот как я это пока написал if (Tvalue == TimerValue) { return Next(); } else { return WAIT; } Что можете посоветовать? -
Как ПРАВИЛЬНО программировать на С++
Serega Doc ответил Serega Doc тема в Программирование
Спасибо все заработало. Что бы не плодить тем буду в будущем писать сюда по вопросам проектирования. Жаль что мне самому не пришла идея использовать указатель на SPI. -
Как ПРАВИЛЬНО программировать на С++
Serega Doc ответил Serega Doc тема в Программирование
Это глупый вопрос который обсуждали миллион раз?