Есть так много способов сделать это. Вот что я сделал:
Генерирует шесть случайных шестнадцатеричных цифр (0-F)
function randColor() {
for (var i=0, col=''; i<6; i++) {
col += (Math.random()*16|0).toString(16);
}
return '#'+col;
}
Чрезвычайно короткая однострочная
'#'+Math.random().toString(16).slice(-6)
Создает отдельные компоненты RGB (00-FF)
function randColor2() {
var r = ('0'+(Math.random()*256|0).toString(16)).slice(-2),
g = ('0'+(Math.random()*256|0).toString(16)).slice(-2),
b = ('0'+(Math.random()*256|0).toString(16)).slice(-2);
return '#' +r+g+b;
}
Переработанная шестнадцатеричная строка (XOR 3 выводят вместе, чтобы сформировать цвет)
function randColor3() {
var str = Math.random().toString(16) + Math.random().toString(16),
sg = str.replace(/0./g,'').match(/.{1,6}/g),
col = parseInt(sg[0], 16) ^
parseInt(sg[1], 16) ^
parseInt(sg[2], 16);
return '#' + ("000000" + col.toString(16)).slice(-6);
}
Встроенное программное обеспечение, возможно, проделало большой путь за последние 10 лет, но обычно мы делали следующее:
Надеюсь, ситуация улучшилась с тех пор, как я делал это в последний раз. Я бы не пожелал этой боли своему злейшему врагу.
Такого рода отладку нужно было сначала сделать с помощью CRO (осциллографа) и (когда у нас было немного денег) ICE (внутрисхемного эмулятора).Надеюсь, ситуация улучшилась с тех пор, как я делал это в последний раз. Я бы не пожелал этой боли своему злейшему врагу.
Такого рода отладку нужно было сначала сделать с помощью CRO (осциллографа) и (когда у нас было немного денег) ICE (внутрисхемного эмулятора).Надеюсь, ситуация улучшилась с тех пор, как я делал это в последний раз. Я бы не пожелал этой боли своему злейшему врагу.
Модульное тестирование в среде ПК (компиляция кода с помощью компилятора C ПК и запуск кода в среде модульного тестирования ПК) может принести много пользы с несколькими оговорками:
stdint.h
, такие как uint16_t
, а не простые unsigned int
и т. Д. Мы следовали этим правилам,
Встраиваемые системы - это обширная тема, но в целом давайте думать об этом как о продукте специального назначения, который сочетает в себе как аппаратное, так и программное обеспечение. Мой встраиваемый фон связан с мобильными телефонами, которые являются лишь небольшой частью всех встраиваемых систем. Я постараюсь оставить следующие моменты немного абстрактными:
По возможности абстрагируйтесь от аппаратных зависимостей. Таким образом, вы можете запускать свои модульные тесты на имитируемом «оборудовании», а также тестировать различные редкие / исключительные случаи, которые будет сложнее протестировать на целевом объекте. Чтобы избежать затрат на абстракцию, вы можете использовать, например, условную компиляцию.
Как можно меньше зависеть от оборудования.
Модульные тесты, выполняемые в среде эмулятора или кросс-компилятора, по-прежнему не гарантируют, что код работает на целевом оборудовании. Вы также должны проверить цель. Протестируйте цель как можно раньше.
На платах eval доступно множество встроенных процессоров, поэтому, хотя у вас может не быть ваших реальных устройств ввода-вывода, часто вы можете выполнить большую часть своих алгоритмов и логики для одного из этих видов вещей, часто с аппаратной отладкой, доступной через jtag. И "единица" в любом случае тесты обычно больше связаны с вашей логикой, чем с вводом-выводом. Обычно проблема заключается в получении тестовых артефактов из одной из этих сред.
Здесь голос неопытности, но я тоже об этом думал в последнее время. Мне кажется, что лучшим подходом было бы либо
A) Напишите как можно больше аппаратно-независимого кода приложения в среде ПК, прежде чем писать его на целевом компьютере, и одновременно с этим напишите свои модульные тесты. времени (выполнение этого сначала на ПК должно помочь вам разделить аппаратно-независимые вещи). Таким образом, вы можете использовать выбранные вами тестеры модулей, а затем тестировать аппаратно-зависимые компоненты старомодным способом - с помощью RS-232 и / или осциллографов и контактов ввода / вывода, передающих данные, зависящие от времени, в зависимости от того, насколько быстро он должен работать. .
B) Запишите все это на целевом оборудовании, но есть цель make для условной компиляции сборки модульного теста, которая будет запускать модульные тесты и выводить результаты (или данные, которые могут быть проанализированы на предмет результатов) через RS-232 или каким-либо другим способом. Если у вас мало памяти, это может быть сложно.
Редактировать 03.07.2009 У меня просто возникла еще одна мысль о том, как проводить модульное тестирование оборудования, зависящего от оборудования. Если ваши аппаратные события происходят слишком быстро для записи с помощью RS-232, но вы не хотите вручную просматривать тонны данных осциллографа, проверяя, поднимаются или опускаются ли флаги контактов ввода / вывода, как ожидалось, вы можете использовать ПК карта со встроенным DIO (например, линейка карт сбора данных National Instruments) для автоматической оценки синхронизации этих сигналов. Тогда вам просто нужно будет написать программное обеспечение на вашем ПК для управления картой сбора данных для синхронизации с текущим выполняемым модульным тестом.
Разделение кода между зависимым от устройства и независимым от устройства. Независимый код может быть протестирован без особых проблем. Зависимый код просто нужно будет протестировать вручную, пока у вас не будет гладкого интерфейса связи.
Если вы пишете интерфейс связи, извините.
Здесь много хороших ответов, некоторые вещи, о которых не упоминалось, - это запуск диагностического кода, чтобы:
Возможно, вы захотите ознакомиться с Test Driven Development for Embedded C Джеймса В. Греннинга. Выход книги запланирован на август 2010 года, но бета-версия книги доступна уже сейчас на The Pragmatic Bookshelf.