|
1 / 1 / 0
Регистрация: 28.01.2010
Сообщений: 537
|
||||||
Вопросы о С.18.07.2011, 01:49. Показов 165787. Ответов 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++ Вопросы по Си Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|