Страница 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 кило. :dont_know:

Re: Вопросы по С/С++ (СИ)

Добавлено: Сб май 21, 2011 17:20:57
asteroid7
Lockdog писал(а):Оптимизация не помогает.
Почему может не хватать, если массив во флеше, а программа не такая уж и большая
В настройках установите контроллер m32 или m64. В настройка линкера:
Изображение
Откомпилите. В папке проекта Output в конце файла <проект>.map покажите распределение сегментов SEGMENTS IN ADDRESS ORDER.
iar_linker_list.GIF
(24.86 КБ) 924 скачивания

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 ?

Звиняюсь, нашёл. :oops:
Делается вот так:

Код: Выделить всё

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), и обратно?
Чет меня переклинило от этой фразы... Понял что требуется только с третьего раза.
У меня вопрос, зачем это?