Страница 28 из 386
Re: Вопросы по С/С++ (СИ)
Добавлено: Пт май 20, 2011 19:22:43
asteroid7
Мастер Ломастер писал(а):это очень хороший компилятор, если на высоком уровне оптимизации код не работает

Сарказм не к месту...
Иар позиционируется как один из лучших компиляторов. Т.к. коммерческий. И чтобы включать оптимизацию medium необходимо хорошо знать Си. А для high - знать возможности и механизмы компилятора.
И мой пост выше был предназначен пользователю, а не высказыванию за иар

Re: Вопросы по С/С++ (СИ)
Добавлено: Пт май 20, 2011 21:55:37
Lockdog
asteroid7 писал(а):На программу не хватает около 100 байт.
Попробуйте включить оптимизатор по "size".
Alt+F7 -> C/C++Compiler -> Optimizations. Выбрать Low или, в крайнем случае, Medium.
При уровне High код может не заработать.
Оптимизация не помогает.
Почему может не хватать, если массив во флеше, а программа не такая уж и большая
Re: Вопросы по С/С++ (СИ)
Добавлено: Пт май 20, 2011 22:07:37
md5sum
Был килобайт...
int __flash atmel[]
Теперь 2кило.
Re: Вопросы по С/С++ (СИ)
Добавлено: Пт май 20, 2011 22:22:08
Lockdog
md5sum писал(а):Был килобайт...
int __flash atmel[]
Теперь 2кило.
И как это поможет?
Re: Вопросы по С/С++ (СИ)
Добавлено: Пт май 20, 2011 23:13:36
md5sum
Lockdog писал(а):И как это поможет?
Так это-ж Ваш кусок кода!
У Вас изначально был массив char заполненный 0xff. И Вы писали, что он 1 кило.
Затем Вы переделали его на int и заполнили 1-ками.
При этом размер массива стал 2 кило.

Re: Вопросы по С/С++ (СИ)
Добавлено: Сб май 21, 2011 17:20:57
asteroid7
Lockdog писал(а):Оптимизация не помогает.
Почему может не хватать, если массив во флеше, а программа не такая уж и большая
В настройках установите контроллер m32 или m64. В настройка линкера:

Откомпилите. В папке проекта Output в конце файла <проект>.map покажите распределение сегментов
SEGMENTS IN ADDRESS ORDER.
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс май 22, 2011 09:48:45
vitalik_1984
asteroid7 писал(а):Lockdog писал(а):Оптимизация не помогает.
Почему может не хватать, если массив во флеше, а программа не такая уж и большая
Может уменьшить занимаемое место?
Есть вариант:)
если есть возможность сделать столбиком эти элементы массива для картинки, то можно перевести их к виду 0b11001111,0b01100000, и тд
если интересует, могу сделать.
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс май 22, 2011 11:28:40
lix
vitalik_1984 писал(а):
Может уменьшить занимаемое место?
Есть вариант:)
если есть возможность сделать столбиком эти элементы массива для картинки, то можно перевести их к виду 0b11001111,0b01100000, и тд
если интересует, могу сделать.
вручную собрался переводить? %)
какая разница как они написаны. главное чтобы в памяти каждый пиксел занимал один бит. а как это в сорце написано - не важно.
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс май 22, 2011 12:27:36
vitalik_1984
lix писал(а):vitalik_1984 писал(а):
Может уменьшить занимаемое место?
Есть вариант:)
если есть возможность сделать столбиком эти элементы массива для картинки, то можно перевести их к виду 0b11001111,0b01100000, и тд
если интересует, могу сделать.
вручную собрался переводить? %)
какая разница как они написаны. главное чтобы в памяти каждый пиксел занимал один бит. а как это в сорце написано - не важно.
в экселе
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс май 22, 2011 16:27:28
DX168B
Вопрос по MFC. (Visual Studio)
Можно ли сделать кнопку неактивной через класс CButton ?
Звиняюсь, нашёл.
Делается вот так:
Код: Выделить всё
CAppDlg::GetDlgItem(IDC_BUTTON1)->EnableWindow(false);
Re: Вопросы по С/С++ (СИ)
Добавлено: Сб июн 04, 2011 23:44:43
stas00n
Друзья, подскажите, как избавиться от варнингов:
Warning [752] conversion to shorter data type ?
Компилятор PICC так ругается, когда я присваиваю переменной константое выражение содержащее операции сдвига, например:
Код: Выделить всё
/* Definitions for T1CON register */
#define _TMR1ON 0
#define _TMR1CS 1
#define _T1SYNC 2
#define _T1OSCEN 3
#define _T1CKPS0 4
#define _T1CKPS1 5
.......
T1CON = (1<<_TMR1ON|1<<_T1OSCEN|1<<_TMR1CS|1<<_T1SYNC);
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс июн 05, 2011 07:18:33
lix
Код: Выделить всё
T1CON = (1<<_TMR1ON)|(1<<_T1OSCEN)|(1<<_TMR1CS)|(1<<_T1SYNC);
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс июн 05, 2011 10:43:36
stas00n
lix, увы, не помогает. Хотя такая запись, пожалуй, правильнее. Да, и похоже что наличие логических операторов в выражении автоматом расширяет результат до 16 бит:
Код: Выделить всё
unsigned char a;
unsigned int b;
a = ~0x01; //Есть варнинг
a = 0xFE; //Нет варнинга
b = ~0x01; //Нет варнинга
Re: Вопросы по С/С++ (СИ)
Добавлено: Ср июн 08, 2011 17:10:58
ibiza11
извиняюсь за оффтоп. Доброго времени суток, коты! Ввопрос немного не по теме, здесь приведу только ссылку на другую тему. Просмотров темы много, а ответов нет, может все боятся Си? А здесь в основном знатоки Си, да и подфорум про микроконтроллеры. В общем у кого есть время, просьба хотя бы прочесть первое сообщение в
этой теме про алгоритм приема пакета по UART.
Re: Вопросы по С/С++ (СИ)
Добавлено: Ср июн 08, 2011 21:00:54
ChipKiller
ibiza11 писал(а):...может все бояться Си?
ИМХО дело не в этом - проще написать с нуля самому, чем понять и переделать чужое.
Re: Вопросы по С/С++ (СИ)
Добавлено: Чт июн 09, 2011 09:00:26
ibiza11
ChipKiller писал(а):ibiza11 писал(а):...может все боятся Си?
ИМХО дело не в этом - проще написать с нуля самому, чем понять и переделать чужое.
так я и не просил переделывать. просто хотя бы привести свой алгоритм, а я уж сам переделаю.
Re: Вопросы по С/С++ (СИ)
Добавлено: Сб июн 11, 2011 02:36:56
Волосатый
Господа, подскажите пожалуйста как из байтового хексового числа (например 0x37) сделать десятичное число (37), и обратно? Сколько уже бьюсь все никак не выходит...
Или может существуют какие-то спец функции для этого (для CVAVR) ?
Re: Вопросы по С/С++ (СИ)
Добавлено: Сб июн 11, 2011 13:11:39
Gudd-Head
Волосатый писал(а):Господа, подскажите пожалуйста как из байтового хексового числа (например 0x37) сделать десятичное число (37), и обратно?
Хитро... обычно переводят 37h <—> 55.
Алгоритм-то перевода простой: берём первую тетраду (3), домножаем на 10 (3*10=30) и прибавляем вторую (30+7=37). По хорошему ещё проверяем, не больше ли 9 каждая цифра.
Re: Вопросы по С/С++ (СИ)
Добавлено: Сб июн 11, 2011 16:11:08
Волосатый
Gudd-Head писал(а):Волосатый писал(а):Господа, подскажите пожалуйста как из байтового хексового числа (например 0x37) сделать десятичное число (37), и обратно?
Хитро... обычно переводят 37h <—> 55.
Алгоритм-то перевода простой: берём первую тетраду (3), домножаем на 10 (3*10=30) и прибавляем вторую (30+7=37). По хорошему ещё проверяем, не больше ли 9 каждая цифра.
Как все просто
Вот быстренько накидал:
Код: Выделить всё
if ((hex&0xF)>9)
hex+=6;
dec=(10*(hex>>4)+(hex&0xF));
У меня в первой тетраде >9 не может быть, поэтому проверку не делал.
Re: Вопросы по С/С++ (СИ)
Добавлено: Сб июн 18, 2011 20:59:41
IfoR
Волосатый писал(а):Господа, подскажите пожалуйста как из байтового хексового числа (например 0x37) сделать десятичное число (37), и обратно?
Чет меня переклинило от этой фразы... Понял что требуется только с третьего раза.
У меня вопрос, зачем это?