Easyelectronics.ru

Электроника для всех
Текущее время: 27 июн 2017, 11:56

Часовой пояс: UTC + 5 часов



    • The World's Cheapest PCB Prototyping: 10 шт. 2-слоя 100*100mm 2$(около 140rub), изготовление за 24 часа.
    • Создание принципиальных схем и проектирование печатных плат
    • Крупнейший китайский онлайн магазин радиодеталей. Скидка 50%
    • Просмотр GERBER файлов

Начать новую тему Ответить на тему  [ Сообщений: 307 ]  На страницу Пред.  1 ... 8, 9, 10, 11, 12, 13  След.
Автор Сообщение
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 13 дек 2012, 01:00 
Старожил
Аватара пользователя

Зарегистрирован: 23 июн 2011, 10:10
Сообщения: 994
Есть функция, хочу чтобы последний параметр был не обязателен. Пишу:

Код:
void function(char addr, char data, char bit=0) {
...
}


Но компилятор ругается. Пишу в WinAvr. Как быть?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 13 дек 2012, 02:56 
Старожил

Зарегистрирован: 14 мар 2012, 13:58
Сообщения: 1727
Function overloading? Но это не C++


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 13 дек 2012, 10:55 
Старожил
Аватара пользователя

Зарегистрирован: 26 сен 2012, 16:33
Сообщения: 607
Откуда: Челябинск
Bonio писал(а):
Есть функция, хочу чтобы последний параметр был не обязателен. Пишу:

Код:
void function(char addr, char data, char bit=0) {
...
}


Но компилятор ругается. Пишу в WinAvr. Как быть?



Код:
void function(char addr, char data, ...) {
...
}

http://typedef.ru/2010/03/varying-argum ... functions/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 13 дек 2012, 12:50 
Старожил

Зарегистрирован: 29 окт 2010, 23:55
Сообщения: 328
используйте макросы
Код:
#define functionZero(addr, size) function((addr), (size), 0)
С одним именем не получится в Си.

_________________
http://angel5a.narod.ru - LPC/STM8/anything yet?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 13 дек 2012, 13:07 
Старожил
Аватара пользователя

Зарегистрирован: 23 июн 2011, 10:10
Сообщения: 994
digitdroid писал(а):

Громоздкая конструкция получается, думаю, что в моем случае нет смысла это использовать.

Я просто почему спрашиваю, когда пишу для PC, это работает, но там чистый С++.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 17 дек 2012, 15:01 
Старожил
Аватара пользователя

Зарегистрирован: 23 июн 2011, 10:10
Сообщения: 994
Когда в си мы что то дефайним вот таким образом:
#define MYDATA 10*2
Компилятор так и будет везде подставлять 10*2 или посчитает и будет подставлять уже 20?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 17 дек 2012, 16:08 
Старожил

Зарегистрирован: 22 мар 2010, 22:54
Сообщения: 3996
зависит от компилятора, но чаще всего все константы упрощаются и кода для умножения не будет.
одно лишь но: препроцессор перед самой компиляцией скорее всего подставит это в код как есть. лучше окружить это скобками.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 17 дек 2012, 16:09 
Старожил
Аватара пользователя

Зарегистрирован: 18 июн 2011, 16:29
Сообщения: 1305
Откуда: Докучаевск, Донецкая обл
Копипаста отсюда
Цитата:
Код:
#define WIDTH       80
#define LENGTH      ( WIDTH + 10 )
Первая оператор определяет идентификатор WIDTH в качестве константы целого числа, и определяет 80 LENGTH с точки зрения WIDTH и константы целого числа 10.каждое вхождение LENGTH заменяет by (WIDTH + 10).в свою очередь, каждое вхождение WIDTH + 10 заменяет выражением (80 + 10).скобки вокруг WIDTH + 10 важны, поскольку они отслеживают интерпретация в выписках следующим образом:
var = LENGTH * 20;

После этапе предварительной обработки преобразуется в оператор:
var = ( 80 + 10 ) * 20;

что дает результат 1800.Без скобок, результат:
var = 80 + 10 * 20;

что дает результат 280.
Вывод - не подсчитает, а будет подставлять. Хотя я бы заключил выражение в скобки.
Ink опередил :)

_________________
Programmer - it is a machine for converting coffee to software.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 17 дек 2012, 17:05 
Старожил
Аватара пользователя

Зарегистрирован: 23 июн 2011, 10:10
Сообщения: 994
Спасибо, значит подставляет все как есть, сам не считает. Компилятор avr-gcc.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 25 дек 2012, 18:48 
Старожил
Аватара пользователя

Зарегистрирован: 06 май 2010, 11:00
Сообщения: 2810
Откуда: Н. Новгород
.... извиняюсь, если уже было, но:
правильно ли я понимаю, что по Сишным правилам 1 / 10 = 0, а 1 % 10 = 1?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 25 дек 2012, 19:22 
Старожил

Зарегистрирован: 01 июл 2010, 15:30
Сообщения: 470
Откуда: Энгельс
Согласно Сишным правилам гарантируется только:
q = a / b
r = a % b
q * b + r == a
Но в большинстве случает будет 1 / 10 = 0, а 1 % 10 = 1.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 25 дек 2012, 19:38 
Старожил
Аватара пользователя

Зарегистрирован: 06 май 2010, 11:00
Сообщения: 2810
Откуда: Н. Новгород
:) ... спасибо... :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 26 дек 2012, 01:35 
Старожил

Зарегистрирован: 30 апр 2010, 22:56
Сообщения: 1521
Откуда: Киев
Bonio писал(а):
Спасибо, значит подставляет все как есть, сам не считает. Компилятор avr-gcc.

Тут, имхо, путаница в терминологии.

Препроцессор подставит дефайны "как есть", ничего не усложняя и не упрощая. А вот компилятор уже, в зависимости от установленной оптимизации, при компиляции (трансляции в машинный код) уже может произвести предвычисление и заменить на одну константу.

Если весь пакет gcc обзывать "компилятором", то может и посчитать, опять же в зависимости от настроек оптимизатора.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 24 мар 2014, 15:01 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2010, 01:03
Сообщения: 643
Откуда: Херсон
Си нужен для того что-бы мозг выносить?
Написал прогу. (часть)
Show


Сцуко. Не работает. Зглядывам в код:

Show


Внимание на строку:
Код:
5a0:   ff cf          rjmp   .-2         ; 0x5a0 <main+0x14>


Оптимизация на код не влияет. Что -O, что -Os - одна хрень.
Вчера потратил пару часов для того чтобы выяснить, что тупой то не Я. Или Я - что-то не понимаю в писании прог на Си.
Цитата:
avr-g++.exe --version
avr-g++.exe (AVR_8_bit_GNU_Toolchain_3.4.3_1072) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

_________________
Если руки золотые, то не важно с какого места они растут.
Изображение
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 24 мар 2014, 15:08 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2010, 01:03
Сообщения: 643
Откуда: Херсон
А вот этим:
Цитата:
avr-g++.exe --version
avr-g++.exe (AVR_8_bit_GNU_Toolchain_3.4.2_939) 4.7.2
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Получаем:
Show


Свиду всё пучком. Посижу-ка пока на 4.7.2

_________________
Если руки золотые, то не важно с какого места они растут.
Изображение
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 24 мар 2014, 15:43 
Старожил

Зарегистрирован: 03 мар 2010, 14:10
Сообщения: 1514
Откуда: Беларусь, Минск
S_Alex писал(а):
Си нужен для того что-бы мозг выносить?

Может вы писали и на Си, но компилировали как Си++.
Вангую: объявление типа sFlg поможет разобраться в ситуации.

Мне кажется, или у вас в обоих случаях бесконечный пустой цикл присутствует?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 24 мар 2014, 16:28 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 2565
S_Alex писал(а):
Си нужен для того что-бы мозг выносить?
Написал прогу. (часть)
Сцуко. Не работает. Зглядывам в код:
Внимание на строку:
Код:
5a0:   ff cf          rjmp   .-2         ; 0x5a0 <main+0x14>

Оптимизация на код не влияет. Что -O, что -Os - одна хрень.
Вчера потратил пару часов для того чтобы выяснить, что тупой то не Я. Или Я - что-то не понимаю в писании прог на Си.

надо лишь потратить еще несколько минут на выяснение значения волшебного слова volatile отсутсвующего перед объявлением указателя на структуру, компилятор всё правильно сделал, проверив if(pFlg->IR_OK==1) только один раз и выпав в бесконечный цикл, то что кто-то снаружи может это значение поменять ему никто не сказал


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 24 мар 2014, 17:24 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2010, 01:03
Сообщения: 643
Откуда: Херсон
amx писал(а):
S_Alex писал(а):
Си нужен для того что-бы мозг выносить?

Может вы писали и на Си, но компилировали как Си++.
Вангую: объявление типа sFlg поможет разобраться в ситуации.

Мне кажется, или у вас в обоих случаях бесконечный пустой цикл присутствует?


Компилировал как Си. Просто Code:Blocks при выводе версии подсунул С++ (в окружении по умолчанию записано было). Спасибо. Исправил.

При версии 4.8.1 он получается пустой, но при версии 4.7.2 все нормально.

_pv
Благодарю, volatile помог ситуации. Как я про него забыл. Вопрос в другом. Как оно раньше работало?

На АСМе, чсн-слово было проще писать. Там хоть граблей больше, но они всё же свои, родные.
И на пустом месте не появляются, после обновления ПО.
У меня складывается такое мнение, при программировании на Си, что больше времени тратится на "выкручивание рук" компилятору и подборке нужных (мало кому понятных ключей) при компиляции и сборке, нежели на само программирование. Конечно это при условии, что Я сам пытаюсь понять, как всё это работает.
Плохо (или хорошо), что за всю мою жизнь небыло такого Учителя, который сел и показал и рассказал, что и почему да и зачем.
Всем УДАЧИ и ЗДРАВИЯ!

_________________
Если руки золотые, то не важно с какого места они растут.
Изображение
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 24 мар 2014, 17:32 
Старожил
Аватара пользователя

Зарегистрирован: 23 янв 2012, 00:31
Сообщения: 1779
Откуда: Новокузнецк
2S_Alex, Проблема в том, что вы пишете на Си, не зная должным образом Си. Можно прочитать Керниган и Ритчи, понять принцип, и тогда программирование станет легким и прозрачным, а компилятор станет хорошим другом.

_________________
elisey.su


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 24 мар 2014, 18:32 
Старожил

Зарегистрирован: 22 мар 2010, 22:54
Сообщения: 3996
я вот наблюдаю как пишут на асме не зная ни асма, ни компилятора, ни проца толком - так тоже веселье еще то:) уверен, они скажут, что на си проще;) а еще лучше на питоне...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 24 мар 2014, 18:36 
Старожил

Зарегистрирован: 03 мар 2010, 14:10
Сообщения: 1514
Откуда: Беларусь, Минск
Ink писал(а):
а еще лучше на питоне...

Лучше всего высекать в камне :) По сложившейся традиции, высеченное в камне априори верно, так что можно не заморачиваться. Да и след потомкам останется, а не эти байты на недолговечных носителях :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 24 мар 2014, 19:32 
Старожил

Зарегистрирован: 10 июн 2011, 23:01
Сообщения: 2565
S_Alex писал(а):
_pv
Благодарю, volatile помог ситуации. Как я про него забыл. Вопрос в другом. Как оно раньше работало?
У меня складывается такое мнение, при программировании на Си, что больше времени тратится на "выкручивание рук" компилятору и подборке нужных (мало кому понятных ключей) при компиляции и сборке, нежели на само программирование. Конечно это при условии, что Я сам пытаюсь понять, как всё это работает.

Раньше оно работало потому что это программа написана так, что результат её работы зависит от настроек оптимизации, которые от версии компилятора могут меняться.
при недостаточном понимании работы копилятора действительно можно потратить очень много времени на перебор различных опций компилятора (да что тут думать, трясти надо).
просто писать так не надо, правильно написанная программа от настроек оптимизации компилятора не зависит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 25 мар 2014, 01:38 
Старожил

Зарегистрирован: 22 мар 2010, 22:54
Сообщения: 3996
amx писал(а):
Лучше всего высекать в камне
но за это не платят...
_pv писал(а):
просто писать так не надо, правильно написанная программа от настроек оптимизации компилятора не зависит.
на что вам возразят: правильно написанная программа на асме тоже хорошая - простая и без багов сразу:))) тут же дело в порядке сложности вещей.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 25 мар 2014, 02:58 
Старожил

Зарегистрирован: 22 июн 2010, 21:53
Сообщения: 917
Откуда: Brussels
Правильно написанная программа - хорошо документирована. Т.е. заранее известно какие именно опции компилятора (и какой именно компилятор) нужно использовать для сборки. Т.е. программа без makefile (или аналогов) и документации - просто набор строк на каком-либо ЯП, не более того.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы о С.
СообщениеДобавлено: 10 апр 2014, 16:09 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2010, 01:03
Сообщения: 643
Откуда: Херсон
Код:
/*
Вопрос спецам.

На attiny261 работат.

avr-gcc.exe -mmcu=attiny261 -Wall -DF_CPU=8000000UL -Os -Ih:\avr\include -IE:\S_Alex\SA_Project\AVR_GCC\tst_m8_eep -c fuse.c -o obj\fuse.o
avr-gcc.exe -mmcu=attiny261 -Wall -DF_CPU=8000000UL -Os -Ih:\avr\include -IE:\S_Alex\SA_Project\AVR_GCC\tst_m8_eep -c main.c -o obj\main.o
avr-gcc.exe -Lh:\avr\lib -Lh:\avr\lib\avr4\ -o bin\tst_m8_eep.elf obj\fuse.o obj\main.o  -mmcu=attiny261 -Wl,-Map=bin\tst_m8_eep.map,--cref
Output file is bin\tst_m8_eep.elf with size 6.23 KB

Running project post-build steps
avr-size --mcu=atmega8 --format=avr bin\tst_m8_eep.elf
AVR Memory Usage
----------------
Device: atmega8
Program:     100 bytes (1.2% Full)
(.text + .data + .bootloader)
Data:          1 bytes (0.1% Full)
(.data + .bss + .noinit)
EEPROM:        1 bytes (0.2% Full)
(.eeprom)
*/

/*
Меняю настройки на atmega8.

avr-gcc.exe -mmcu=atmega8 -Wall -DF_CPU=8000000UL -Os -Ih:\avr\include -IE:\tst_m8_eep -c fuse.c -o obj\fuse.o
avr-gcc.exe -mmcu=atmega8 -Wall -DF_CPU=8000000UL -Os -Ih:\avr\include -IE:\tst_m8_eep -c main.c -o obj\main.o
avr-gcc.exe -Lh:\avr\lib -Lh:\avr\lib\avr4\ -o bin\tst_m8_eep.elf obj\fuse.o obj\main.o -mmcu=avr4 -Wl,-Map=bin\tst_m8_eep.map,--cref
obj\main.o: In function "main':
main.c:(.text.startup+0x4): undefined reference to "__eerd_byte_m8'
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 0 second(s))
1 error(s), 0 warning(s) (0 minute(s), 0 second(s))

Чего ему не хватает.
*/
   
#include  <avr\io.h>
#include  <avr\eeprom.h>

EEMEM uint8_t eTmin;
uint8_t vTmin;
int main(void)
  {
  vTmin = eeprom_read_byte(&eTmin);
  while(1)
    ;
  return 0;
  }

_________________
Если руки золотые, то не важно с какого места они растут.
Изображение
Изображение


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 307 ]  На страницу Пред.  1 ... 8, 9, 10, 11, 12, 13  След.

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB