|
1 / 1 / 0
Регистрация: 28.01.2010
Сообщений: 537
|
||||||
Вопросы о С.18.07.2011, 01:49. Показов 165971. Ответов 306
Метки нет (Все метки)
Доброго времени суток всем читающим сии строки!
В который раз сажусь писать прогу на Си, и вспоминаю про АССЕМБЛЕР... Есть некий код...
Внимание Вопрос. Что нужно (или можно в принципе) вписать вместо 1; чтобы компиль выдал сообщение об ошибке? Или поставте меня на правильные рельсы. Как его можно переписать? Да так, чтобы хоть ругался когда это нужно и как мне это нужно. А то что-то я не могу понять, как это ...
0
|
||||||
| 18.07.2011, 01:49 | |
|
Ответы с готовыми решениями:
306
БД: Контрольные вопросы по дисциплинам, темам и разделам: дисциплина; преподаватели; набор билетов; билет; вопросы к билетам; вопросы; темы вопросов Когда вопросы кончаются, сделать кнопку неактивной и вывести сообщение о том, что вопросы кончились вопросы про вопросы |
|
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 619
|
|||||||||||
| 09.11.2011, 01:12 | |||||||||||
|
На Си единственный выход, как я вижу - вручную установить этот флаг:
SREG|=1<<1; //Устанавливаем в 1 1-й разряд, т.е. флаг Z Я пробовал записывать в SREG в Си, компилятор не жалуется. А у меня такой вопрос: Есть код: Из временной структуры, адрес которой передан в функцию, копируются параметры в глобальную структуру motors.
0
|
|||||||||||
|
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
|
|
| 09.11.2011, 01:19 | |
|
Компилятор так оптимизировал. Ему показалось быстрее.
0
|
|
|
1 / 1 / 0
Регистрация: 28.01.2010
Сообщений: 537
|
|||||||
| 09.11.2011, 01:27 | |||||||
на одном форуме видел вот такую SREG & (1<<SREG_C) проверку, но она блин тормознутая генерит 3 команды, а не одну. Как хотелось бы.
0
|
|||||||
|
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 115
|
|||||||
| 09.11.2011, 08:23 | |||||||
Я в ассемблере не шарю и не знаю уменьшит ли это количество команд, но попробуй вот так:
0
|
|||||||
|
0 / 0 / 0
Регистрация: 04.05.2010
Сообщений: 115
|
||
| 09.11.2011, 08:25 | ||
0
|
||
|
SWK
|
|||
| 09.11.2011, 11:38 | |||
Цикл в программе упрощает ее написание, но увеличивает время исполнения. Как и многие другие языковые конструкции. Упрощая написание листинга, и даже уменьшая размер кода, теряем в быстродействии. Линейный код исполняется всегда быстрее, чем с проверками условий и переходами после каждого действия. Но, например, если число проходов не жестко задано, а переменное, без цикла просто не обойтись. Только не подумайте, что я против циклов вообще (есть тут некоторые, кто может так подумать). Они действительно удобны, и часто сокращают не только листинг, но и размер кода. Но за все нужно платить (например, быстродействием), и помнить об этом, и четко представлять, где, что и как у нас делается в программе. И в некоторых случаях (например, если время выполнения участка кода очень уж критично, а число проходов цикла фиксировано и невелико), можно и самому повторить пару - тройку раз действие, вместо цикла, не надеясь, что это сделает оптимизатор компилятора.
|
|||
|
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 619
|
|
| 09.11.2011, 18:58 | |
|
Спасибо.
Быстродействие для меня - не самое важное. В моем случае важнее размер занятой памяти. Потом я попробую сделать ассемблерную вставку, просто я еще не разобрался с ними в WinAVR. По-моему должно получиться довольно хорошо, если я правильно расположу элементы структуры друг за другом в порядке копирования в них байтов из другого линейного массива(функция должна копировать из приемного буфера USORTa информацию в соответствующие поля структур, которые составляют массив структур, и делать пару других действий). На ассемблере и правда в некоторых случаях выходит проще и лаконичней, в этом я уже убедился. И еще вопрос: есть у меня структура, в ней несколько параметров, и есть массив таких структур. Будет ли компилятору проще и результат компиляции лучше, если я заместо массива структур сделаю несколько массивов из тех же параметров, что в структуре?
0
|
|
|
0 / 0 / 0
Регистрация: 14.02.2010
Сообщений: 494
|
|
| 09.11.2011, 21:16 | |
|
как правило не будет, скорее даже наоборот. Хотя многое зависит от кода: при включенной оптимизации переменные часто упаковываются
0
|
|
|
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 619
|
|
| 09.11.2011, 22:02 | |
|
Я попробовал только что, сэкономил примерно от 17% занятого места меги8 до 14%.
0
|
|
|
1 / 1 / 0
Регистрация: 28.01.2010
Сообщений: 537
|
|
| 10.11.2011, 01:04 | |
|
Есть некая строка во Флеше.
static const prog_char str_P[] = "ROM string"; Вопрос знатокам. Как к ней добавить NL и CR (13,10)? Думал что схавает так (на масме так можно) static const prog_char str_P[] = "ROM string",13,10; // А нет....
0
|
|
|
0 / 0 / 0
Регистрация: 26.04.2010
Сообщений: 1,445
|
|
| 10.11.2011, 01:09 | |
|
"ROM string\r\n"
0
|
|
|
1 / 1 / 0
Регистрация: 28.01.2010
Сообщений: 537
|
||
| 10.11.2011, 01:41 | ||
Переписываю свою ОС с асма. Пока полет нормальный ...
0
|
||
|
0 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 461
|
|
| 10.11.2011, 11:20 | |
|
В догонку: "ROM string\x13\x10". Так можно любые байты добавлять.
0
|
|
|
0 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 461
|
||||||||||||||||||
| 10.11.2011, 13:06 | ||||||||||||||||||
0
|
||||||||||||||||||
|
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 619
|
|
| 10.11.2011, 18:05 | |
|
А можно ли как-нибудь в WinAVR получить доступ к какому-либо байту многобайтовой переменной? Ну например, к старшему байту int без всяких сдвигов однобайтовой переменной влево на 8 разрядов?
0
|
|
|
0 / 0 / 0
Регистрация: 27.06.2010
Сообщений: 405
|
||||||
| 10.11.2011, 18:17 | ||||||
|
Сдвиги - это как раз правильный способ получения старшего байта.
Можно конечно и так:
0
|
||||||
|
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 619
|
|
| 10.11.2011, 22:57 | |
|
Спасибо. Про вариант с квадратными скобками я не знал. А указатели в AVR-GCC, как я понял, указывают на младший байт переменной, т.е. на больший адрес?
0
|
|
|
0 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 461
|
|
| 10.11.2011, 23:16 | |
|
Указатели указывают туда, куда вы их настроите.
uint16_t i = 0x1234; //Переменная, 2-х байтовое целое uint8_t b = ((uint8_t *)&i)[1]; /* &i - получаем адрес переменной i (uint8_t *)&i - приводим к типу массив 2-х байтовых целых ((uint8_t *)&i)[1] - получаем 2-й байт массива, там будет старший байт переменной i, т.к. в AVR little-endian.
0
|
|
|
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 619
|
||||||
| 15.11.2011, 19:07 | ||||||
|
Столкнулся со следующей проблемой. Пишу программу для ПК на Dev-C++.
Никак не могу добиться нормального форматированного ввода. Проблема с step_number[0] и step_number[1]. Похоже, что в них записывается значение старшего разряда какой-то другой переменной, в итоге там обычно ноль, если значения предыдущих параметров меньше 255, все остальные пишутся вроде бы нормально. Причем если изменить тип step_number на int, то неправильно вводится число только в step_number[0]. Вот такая вот проблема. И еще, какому типу данных на Dev-c++ соответствует двухбайтная переменная?
0
|
||||||
|
4 / 4 / 0
Регистрация: 12.03.2013
Сообщений: 24
|
|
| 15.11.2011, 19:19 | |
|
попробуйте через sizeof
0
|
|
| 15.11.2011, 19:19 | |
|
Наука не отвечает на вопросы "почему". Наука отвечает на вопросы "как, сколько" Вопросы Вопросы по TP Вопросы по C++ Вопросы по Си Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Лето уходит
kumehtar 17.08.2026
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины".
За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html
Задача: . . .
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|