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

ViKo

Модератор
  • Постов

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

Весь контент ViKo


  1. Решил сравнить адресную и индексную арифметику на приведенном выше своем примере. ;;;202 static const uint8_t Digit[10] = {'0','1','2','3','4','5','6','7','8','9'}; ;;;203 const uint8_t *pDig = Digit; 000092 4870 LDR r0,|L1.596| ;;;204 for (uint32_t i=10; i; i--) GPIOA->ODR = *(pDig++); 000094 4a70 LDR r2,|L1.600| 000096 210a MOVS r1,#0xa |L1.152| 000098 f8103b01 LDRB r3,[r0],#1 00009c f8c2380c STR r3,[r2,#0x80c] 0000a0 1e49 SUBS r1,r1,#1 0000a2 d1f9 BNE |L1.152| 0000a4 496b LDR r1,|L1.596| ;;;205 for (int32_t j=9; j>=0; j--) GPIOA->ODR = Digit[j]; 0000a6 2009 MOVS r0,#9 |L1.168| 0000a8 5c0b LDRB r3,[r1,r0] 0000aa f8c2380c STR r3,[r2,#0x80c] 0000ae 1e40 SUBS r0,r0,#1 0000b0 d5fa BPL |L1.168| Результат слегка обескуражил. Обращение к элементу массива с помощью индекса занимает меньше байтов. Особенность системы команд ARM. Сравните строки 98 и a8. В любом случае, эти два способа работают по-разному.
  2. Ну, вот пример специально для вас. Keil, STM32. static const uint8_t Digit[10] = {'0','1','2','3','4','5','6','7','8','9'}; const uint8_t *pDig = Digit; for (uint32_t i=10; i--; ) GPIOA->ODR = *(pDig++); вот часть листинга после компиляции ;;;202 static const uint8_t Digit[10] = {'0','1','2','3','4','5','6','7','8','9'}; ;;;203 const uint8_t *pDig = Digit; 000092 486d LDR r0,|L1.584| ;;;204 for (uint32_t i=10; i--; ) GPIOA->ODR = *(pDig++); 000094 210a MOVS r1,#0xa 000096 4b6d LDR r3,|L1.588| 000098 e003 B |L1.162| |L1.154| 00009a f8102b01 LDRB r2,[r0],#1 00009e f8c3280c STR r2,[r3,#0x80c] |L1.162| 0000a2 1e49 SUBS r1,r1,#1 0000a4 d2f9 BCS |L1.154| Я удивляюсь, что вы подвергаете сомнению азбучные истины :) О, заметил, вы уже исправились :)
  3. Теоретически, компилятор ругаться не должен. Потому что в книжках написано, что имя массива есть адрес его первого элемента. Так же, как имя функции есть адрес входа в эту функцию. Сергей Борщ прав, когда говорит, что операции с ptr и array одинаково допустимы. Разница в том, как это будет реализовано при обработке всего массива.
  4. Я согласен с вашими словами, однако, массив обрабатывается обычно именно по его адресу и индексу. Т.е., например, в каждом шаге цикла, обрабатывающего массив, вычисляется адрес элемента массива, с использованием адреса начала массива и индекса. Если указатель можно просто перемещать по элементам массива (адресная арифметика), то при индексной арифметике адрес элемента массива нужно вычислить по адресу начала массива и индексу элемента, для этого задействовать некую временную переменную (регистр микропроцессора). Для ARM, к примеру, эта операция выполняется в одной команде, а для PIC16 команд потребуется несколько.
  5. На половину вопросов, задаваемых на форуме, существует универсальный ответ - Выделите проблемную часть проекта в отдельный проект. Оставьте только самое необходимое. Скомпилируйте. Исследуйте вдоль и поперек. Глядишь, и наступит просветление.
  6. Только для массивов имеется две переменные - адрес начала массива и индекс, которые складываются согласно типу переменных массива. А для указателей имеется всего одна переменная - адрес, соответствующий типу переменной, на которую указывает указатель.
  7. Ричард Лайонс. Цифровая обработка сигналов.
  8. Присоединяюсь к вопросу - из чего выбрано изменение угла в диапазоне 0...3216? Выберите более "круглый" диапазон, и ничего делать не придется.
  9. Попробуйте lpm_rom. По-моему, она должна больше подходить для вашей задачи. Хотя написано - только для обратной совместимости... :( Скорее всего, что-то в параметрах мегафункции не так описано.
  10. А Keil для STM32 скушал без вопросов const char DDD[2][3] = {"123", "456"}; for (uint32_t i=6; i!=0; i--) USART3->DR = DDD[i/3][i%3];
  11. На всякий случай спрошу - а как видели, что на выводах земли есть земля? Я когда проверяю, держу палец на конце осциллографического пробника, тогда с него лезут наводки. А когда касаюсь пробником земли, наводки исчезают (закорачиваются на землю). Если же земли нет, наводки остаются.
  12. Нужно пройтись по всем ногам питаний и земли, и на каждой должно быть то, что нужно. Одну ножку не запаяли - и микросхема не работает.
  13. А еще... а еще можно передать байт, как есть. А преобразовывать в цифры уже на том конце. :) Любопытно, если массив объявлен const char DDD[256][3], а заносятся строки "000" и т.д., что будет отброшено - нуль, заканчивающий строку, или старшая цифра?
  14. Можно сделать мультиплексор с конвейером. В первом такте декодировать старшие разряды адреса, а во втором младшие. Будет задержка на такт. Читать данные с учетом этой задержки. Аналогично при записи с шины. Нужно сформировать сигналы выбора и записи. Тоже можно конвейером.
  15. Только нужно исключить состояние, когда все разряды регистра равны 1. В XAPP052 используются элементы XNOR (исключающее ИЛИ - НЕ). Поэтому можно начать генерацию ПСП с нулевого состояния регистра.
  16. Нет, не должно. '1 должна превратиться во все 11111111... на всю длину слова.
  17. А как вам этот стандарт ГОСТ 26.013-81 СРЕДСТВА ИЗМЕРЕНИЯ И АВТОМАТИЗАЦИИ СИГНАЛЫ ЭЛЕКТРИЧЕСКИЕ С ДИСКРЕТНЫМ ИЗМЕНЕНИЕМ ПАРАМЕТРОВ ВХОДНЫЕ И ВЫХОДНЫЕ там вы найдете понятие "срез" не знаю даже, как на него вышел. Искал тот, что дали, а сайт открыл этот :) А, понял, извиняюсь. Попал по ссылке andrewkrot для tyro В каком бы разделе ни находился, желательно писать грамотно и употреблять правильные термины. В данном случае понятие "срез" связано с названием темы. Посмотрел и ГОСТ 19480-89 Там есть понятие "время спада", "время нарастания", "длительность фронта", "длительность спада". Как-то бессистемно..., почему не "длительность нарастания" или "время фронта". По-моему, стандарты подобного рода и приводят к разрастанию энтропии :) Обычное ... разгильдяйство. В-общем, остаюсь при своем мнении. Считаю, что меня учили правильно. Но, если кто будет употреблять "спад", наезжать не буду. На этом успокаиваюсь. :) P.S. еще один термин нашел в последнем стандарте - "время успокоения" :a14:
  18. вполне подходит, не находите? Скажите хотя бы примерное название стандарта, и я от вас отстану...:)
  19. немного офтопика: Большой толковый словарь ФРОНТ, -а; мн. род. -ов, дат. -там; м. [от лат. frons (frontis) - лоб, передняя сторона] 1. Строй войск, солдат. Построить войска во ф. Идти фронтом (шеренгой). // Сторона строя, в которую военнослужащие обращены лицом (машины - лобовой частью). Повернуть полк фронтом к штабному автомобилю. Ф. автоколонны. Зайти во ф. кому-л. // Мор., авиа. Расположение кораблей, самолётов на линии, перпендикулярной курсу их следования. Корабли приняли строй фронта. 2. Передняя, обращённая к противнику сторона боевого расположения войск или отдельной войсковой единицы; место, пространство, занятое такой войсковой единицей. Береговой ф. Оборонять восемь километров фронта. Линия фронта. 3. Передняя линия, полоса. Ф. пожара. Лес наступает широким фронтом. 4. Место, район военных действий и расположение действующих войск во время войны. Уехать на ф. Письма с фронта. Был на фронте (воевал). Южный ф. Западный ф. Уже завтра город может стать фронтом. // Совокупность вооружённых сил, действующая армия в таком районе. Командующий фронтом. Штаб фронта. Помогать фронту. Содружество фронта и тыла. 5. чего. Место, участок, на котором одновременно выполняется несколько процессов, работ. Ф. погрузки. Ф. работы. // чего или какой. Область, отрасль какой-л. коллективной деятельности. Идеологический ф. Культурный ф. Определить ф. работ. По всему фронту (везде, по всем направлениям, во всех областях знаний, деятельности и т.п.). На два фронта (в двух направлениях). 6. Объединение общественных сил для действий в каком-л. направлении для борьбы за общие цели. Национальный ф. Ф. освобождения. Ф. участников борьбы за мир. 7. Метео. Поверхность раздела между различными воздушными массами. Облачные фронты. Ф. сухой и тёплой погоды сохраняется. Гроза идёт с запада, ф. быстро распространяется. 8. Спец. Передняя, лицевая часть чего-л. Ф. каблука. Ф. котла. Ф. детали. ◊ Широким фронтом. Повсеместно, с большим охватом. Стать или вытянуться во фронт. Стать прямо, сдвинув пятки ног, вытянув руки по швам. < Единым фронтом; широким фронтом, в зн. нареч. Дружно, сплочённо, полным ходом. Подготовка к выборам шла широким фронтом. Фронтовой (см.).
  20. Учили меня давно. Стандарты меняются. Все может быть. Если покажете конкретное место, приму к сведению. А пока останусь на том, чему обучен. P.S. а в "конфронтации" кто с кем? :) Уж если быть последовательным - спад, нарастание. Как у буржуинов - fall, rise.
  21. Посмотрел первую статью. Формул испугался. По-моему, поставленная задача решается с помощью линейной интерполяции. Т.е. нужно значение, соответствующее шагу 1.5 - берем среднее значение между 1-м и 2-м элементами таблицы. Благодаря тому, что при малых значениях sin(x) = x, такая интерполяция допустима.
  22. По поводу термина "спад" - не согласен. Когда меня учили, называли "срез". При этом категорически запрещали выражения "передний фронт" и "задний фронт" (последнее - нонсенс). По существу вопроса - я показал, что, вообще говоря, в таблице истинности возможны и фронты со срезами. Если они описывают последовательностную логику, на триггерах (которые чуствительны именно к перепадам сигналов). К комбинаторной логике (AND, OR и т.д) срезы и фронты не применимы, потому что эти элементы не чувствительны к перепадам. Поэтому в таблицах истинности для них фигурируют только 0, 1, X, Z. Надеюсь, изложил понятно. Вот так и ответьте тому, кто вам задал. P.S. но если надо ответить на поставленный вопрос, можете прикинуть, что будет, если на элемент AND подать 1 и перепад из 1 в 0. Понятно, что перепад пройдет дальше. Потому что 1 & 1 = 1, 1 & 0 = 0. Но это лишнее, потому что вытекает из таблицы истинности для 0, 1, X. И т.д. Разве это сложно? P.P.S. (понесло меня). Достаточный ответ был дан в первом же сообщении в теме.
  23. Так сделайте простейший проект с "глюком" и выложите сюда. Может быть, и выкладывать не придется, все окажется просто. Как говорится, "разделяй и властвуй". P.S. пока писал, сами к этому пришли :)
×
×
  • Создать...