pfg21: Открываете любой Datasheet на ядро Cortex-M*, листаете до раздела "Memory Model", находите строку "The processor has a fixed memory map that provides up to 4 GB of addressable memory."
Собственно, вот от этой особенности ядра и пляшем. У одного контроллера будет 20kiB RAM, у другого - 512kiB. Один может адресовать несколько банков EXT-RAM / NAND/NOR-Flash, другой - нет. И это должно по-разному отрабатываться на симуляторах.
Bit-Bang, конечно, прикольно, но так же есть не на всех ядрах. И сложностей особых с ним нет. Вместо операции R-M-W будет проходить операция записи байта. Вот только эмулятору ПРИДЁТСЯ выполнять R-M-W операцию.
pfg21: Я не путаю. Proteus позволяет симулировать работу электронной схемы (ISIS - проектирование / симуляция, а вот монтажная плата - это другой его "компонент" - ARES).
Уточню по памяти.
Адресное пространство != объём памяти. В адресном пространстве Cortex-M* контроллеров довольно-таки много "дыр", и при этом, обращение к одним адресам на одном контроллере вызовет какое-то событие (смену флагов, хотя бы), а на другом - HardFault, т.к. память не может быть READ (c). И всё это нужно отлавливать.
Мне лично кажется довольно медленным делать проверки для каждого адреса памяти. А обращаться к ним через индекс... Индексы... для диапазонов, да. Но куча математических операций с указателями убьёт всю производительность.
Как эмуляция процессора PS3 на PC. Вроди бы, последний и мощнее, и умнее... а вот тормозит. А всё дело в специфических инструкциях первого.
Модули усложнены, зато позволяют очень гибко себя настроить.
Остальное - верно. Эмулировать можно, но либо медленно, либо неточно (в частности, медленно - индуктивности / трансформаторы - ну ОЧЕНЬ медленно).
Я времени внутрисхемных отладчиков не застал. Поймал сразу контроллеры поддерживающие внутрисхемную отладку.
В начале инициализируем порты. Предполагаю, что пины DI = PORTA.0, SCK = PORTA.1, LATCH = PORTA.2
Пины ST0~ST5 - уже сами.
//Где-то в инициализации:
DDRA |= 0x07;
//Функция вывода байта. Выталкиватся вперёд старшим битом.
//Например, 10110000 будет передан самым левым битом вперёд.
void SendByte(uint8_t byte) {
uint8_t i;
for (i=0;i<8;i++) {
if (byte & 0x80) {
PORTA |= 0x01;
} else {
PORTA &= ~(0x01);
};
PORTA |= 0x02;
PORTA &= ~(0x02);
byte = byte << 1;
};
PORTA |= 0x04;
PORTA &= ~(0x04);
};
sergeevpetro: Тогда очень странно. Попробуйте добавить логи, проследить за загрузкой ЦП, освобождением буферов данных и прочим. Можно поднять на своём же ПК сервер и для эксперимента попробовать скачать файл с него. Если скорость тоже будет падать - проблема на стороне программы. Если нет - возможно, ухудшение параметров канала (потери пакетов, и тому подобное).
У Вас как сделан раздел? / находится на LVM томе? Если да, то нужно сделать по очереди:
0. Расширить диск.
1. Расширить Physical Volume до конца диска.
2. Расширить Logical Volume до конца диска.
3. Расширить файловую систему на логическом диске.
Скорее всего последовтаельность действий будет такой: pvresize -> lvresize -> resize2fs
Заведите переменную так:
$last_add_date = ((floor(($day-1)/3)) * 3 + 1);
$var += $increment * floor(($day-1)/3);
Собственно, в переменной $last_add_date будет _календарный_ номер дня.
Банальщина? Ещё какая.
Можно было просто взять готовую таблицу и играть с индексами, наверное.
Mercury13: Гудение трансформатора - это нормально. С этим трудно что-то сделать. Разве ставить виброгасители на плату - специальные резиночки для крепления жёстких дисков, и аналогичные им. Но плата будет закреплена уже мягко.
И дальше даже не знаю, в какую сторону ещё советовать.
Mercury13: Не влияет наличие/отсутствие кабеля?
И давно такой шум в таком случае? Я бы вообще проверил все электролиты, вполне возможно что часть из них потеряла ёмкость, и потому такой фон возник.
issssrt: Не могу точно ответить. Пока до столь больших чипов не добирался. Да и без трафарета могу разве что QFN/QFP/SO менять. Их наловчился хорошо, а вот BGA - сложнее.
Вы верно мыслите, лучше учиться на мёртвых платах. Только вот варианта проверки у меня в наличии нет, да и нет необходимости.
Как показывает практика, воздухом тоже можно паять, хоть и чуть дольше. Думаю, можно в начале прогревать и феном вокруг, но качество всё же будет ниже.
Так что заранее озаботьтесь подогревом. Он ох как пригодится.
issssrt: Не совсем. Нижний прогрев нагревает плату до 100-150°С медленно от комнатной. А затем уже производится пайка чипа.
При такой температуре прогрева будет незначительное воздействие на компоненты, а так же значительно уменьшается разница температур между местом пайки и переферией (плату меньше ведёт).
Можете поискать на форумах рекомендации, посмотреть видео на ютубе. Там есть даже видеообзоры на тему пайки. Некоторые даже с пояснениями.
Михаил: В общем, просто не находил библиотек на эти чипы. Теоретически, можно написать модуль самому. Где-то на kazus.ru/forum/ была тема по Proteus'у, но боюсь, будет довольно нудно.
Под Linux можно найти Eclipse, но тут уже не подскажу подробнее. Помнится, Keil вполне нормально должен запускаться в Wine'е, так что это тоже вариант.
А так - пока не разбирался. Думаю, если не заморачиваться с симуляцией ARM ядра/переферии - то можно обойтись консольными Makefile-ами, но... сам пока собирал только под AVR.
На Хабре есть пример разбора получаемых файлов, там же есть пример строки компилятора:
Я бы поставил -O3 (привычка оптимизировать до упора), ну и у Вас ядро будет M3, вроди бы.
Опять же, где-то надо задать каталоги просмотра.
Кстати, на GitHub есть готовый Makefile. Можете посмотреть. Хотя, выглядит он довольно монструозно.
Сожалею, но по Makefile'у для ARM не помогу. Собрал для себя только для AVR-GCC, да и то, как мне сказали, довольно костыльно.
Но свою функцию он выполняет.
Примерная структура такова:
Константа = значение
Цель: зависимости
выполняемая команда 1
выполняемая команда 2
...
Цель: Зависимости.
выполняемая команда 1
...
Самая первая цель - цель по-умолчанию* (предположительно)
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.
Собственно, вот от этой особенности ядра и пляшем. У одного контроллера будет 20kiB RAM, у другого - 512kiB. Один может адресовать несколько банков EXT-RAM / NAND/NOR-Flash, другой - нет. И это должно по-разному отрабатываться на симуляторах.
Bit-Bang, конечно, прикольно, но так же есть не на всех ядрах. И сложностей особых с ним нет. Вместо операции R-M-W будет проходить операция записи байта. Вот только эмулятору ПРИДЁТСЯ выполнять R-M-W операцию.