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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
shurikss123
Грызет канифоль
Сообщения: 271
Зарегистрирован: Пн окт 25, 2010 20:47:04
Откуда: Казахстан, Астана

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

Сообщение shurikss123 »

ARV писал(а):

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

char buf[32];
//fuse_lo равен 0х06
itoa(fuse_lo,buf,16);
if(strlen(buf) < 2) LCDsendString("0");
LCDsendString(buf);

если вы не использовали sprintf в других частях программы, боюсь, вы будете удивлены размером кода, приведенного вами с воплем "вот то, что надо!"....


да прилично и помипо этого 0х0f привращает тупо в число(Очень досадно! Вы правы!), досадно что придеться несколько раз повторить с разными действиями, но размерчик меньше.! спасибо ARV
Изображение
Мастер на все руки, кручу, кручу, кручу и матерюсь
Повелитель паяльной станции, лома, и пинцета!!!
12val12
Потрогал лапой паяльник
Сообщения: 315
Зарегистрирован: Пт янв 29, 2010 19:42:27

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

Сообщение 12val12 »

как можно задефинить пины портов для пика чтоб можно как в атмегах на CV конекретно управлять пинами на выход
чтобы возможно было писать например
PORTC.3=0;
POPTC.3=A;
ух ты.... показывает
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

12val12 писал(а):POPTC.3=A

И что, по-вашему, должно произойти, если в третий бит порта С записать "А"? :)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
12val12
Потрогал лапой паяльник
Сообщения: 315
Зарегистрирован: Пт янв 29, 2010 19:42:27

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

Сообщение 12val12 »

Gudd-Head писал(а):
12val12 писал(а):POPTC.3=A

И что, по-вашему, должно произойти, если в третий бит порта С записать "А"? :)

А= либо 0 либо 1
цель не писать
if (A) { PORTC=PORTC|0b1 } else {PORTC=PORTC & (~ (0b1}
ух ты.... показывает
Аватара пользователя
levaclaus
Потрогал лапой паяльник
Сообщения: 302
Зарегистрирован: Пн янв 07, 2008 16:56:28
Откуда: Минск

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

Сообщение levaclaus »

Были у меня часы с ду, добавил в часы термометр, всё работает, показывает, кроме одной мелочи

часы перестали реагировать на нажатие кнопки "настройка". Причём кнопка срабатывает как надо, если мы уже в меню. В меню получается возможно зайти только с пульта ду, где эта кнопка продублирована.
Может кто глянуть прошивку, помочь касяк найдти - вроде скобки не пропустил, ничего не удалил.
во вложении 2 кода - до установки термометра и после
Последний раз редактировалось levaclaus Пт фев 11, 2011 18:40:14, всего редактировалось 1 раз.
Qwq
Встал на лапы
Сообщения: 87
Зарегистрирован: Пт ноя 02, 2007 18:18:26
Контактная информация:

left shift count >= width of type

Сообщение Qwq »

WinAVR ругается
варнингом "left shift count >= width of type" на строчку

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

case 0b00000001: Flags |= (1<<RUN_FLAG);break;//set run_flag

при этом нормально кушает

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

case 0b00000001: Flags |= 0b01000000;break;//set run_flag

при том что есть

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

#define RUN_FLAG 0b01000000


что я делаю не правильно?
Аватара пользователя
Кислый
Поставщик валерьянки для Кота
Сообщения: 2095
Зарегистрирован: Чт апр 08, 2010 18:50:01
Откуда: Краснодар
Контактная информация:

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

Сообщение Кислый »

задефайнь RUN_FLAG просто на 7.

и на память. это

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

x = x | y

а

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

x |= (1 << y)
это

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

x = x | ( 1 << y )
.. жопа. так тоже не правильно :)))
Последний раз редактировалось Кислый Вс фев 06, 2011 23:00:14, всего редактировалось 2 раза.
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics
Аватара пользователя
Кислый
Поставщик валерьянки для Кота
Сообщения: 2095
Зарегистрирован: Чт апр 08, 2010 18:50:01
Откуда: Краснодар
Контактная информация:

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

Сообщение Кислый »

так. у меня глобальный вопрос.
обычно в программе я имею один .с и несаколько заголовочных. давно было интересно, как собрать несколько .с в кучу посредством одного заголовочного .h . Я не пойму самого принципа КАК ?
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

никак. при помощи заголовочников сишные исходники в кучу не собираются :)
и вообще, не всегда между ними может быть связь (количественная).
исходники КОМПИЛИРУЮТСЯ - то ли при помощи makefile, то ли путем принудительного перечисления или еще как-то, поэтому когда ваш проект состоит из нескольких исходников, вы все их и должны "скормить" компилятору, а потом полученные объектные файлы - линкеру. вот как-то так :)
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Кислый
Поставщик валерьянки для Кота
Сообщения: 2095
Зарегистрирован: Чт апр 08, 2010 18:50:01
Откуда: Краснодар
Контактная информация:

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

Сообщение Кислый »

не не не. вы меня не правильно поняли.
я не могу понять вот чего:

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

// 1.c
#include ololo.h;
.. blah - blah - blah ..


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

// 2.c
#include ololo.h;
.. blah - blah - blah ..


так я в одном из проэктов прикрепил функцию blow_fish'a работает уже пол года, а вот как ? это мне очень интересно.
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

действительно, мне не понятно, что вам не понятно :)

хидер - он ведь что делает? он уведомляет компилятор, что такие-то вещи СУЩЕСТВУЮТ и имеют такие-то характеристики (тип, параметры и т.п.). компилятор и компилирует исходники, оставляя по этой информации в нужных местах нужные дыры - адреса для перехода на функции, адреса переменных и т.п. а потом за дело берется компоновщик, который ковыряется во всех объектных файлах проекта, включая системные библиотеки, и ищет все упомянутые в хидерах сущности, помещая на место дыр их адреса или значения... при этом, если надо, прилепляется и код этих сущностей из системных библиотек...

яснее стало?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Кислый
Поставщик валерьянки для Кота
Сообщения: 2095
Зарегистрирован: Чт апр 08, 2010 18:50:01
Откуда: Краснодар
Контактная информация:

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

Сообщение Кислый »

нет не стало.. ладно. буду искать что-то посерьезнне из литературы.

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

т.е. конструкция

int a = 5;
int b[a] = {};

невозможна
при этом нельхочется создавать "массив с запасом", и не хочется использовать new.. я теряю ощущение контроля ситуации.
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

Кислый писал(а):как создать массив необходимой мне длинны, когда длинны массива я не знаю в принципе ( допустим он вычисляется )

т.е. конструкция

int a = 5;
int b[a] = {};

невозможна
при этом нельхочется создавать "массив с запасом", и не хочется использовать new.. я теряю ощущение контроля ситуации.
во-первых, ваша конструкция и так невозможна в Си, разве что при использовании расширений стандарта (например, GCC вполне позволяет делать локальные массивы с вычисляемым по ходу пьесы размером).

во-вторых, если вы не знаете размер, не хотите делать запас и не желаете использовать динамическое распределение памяти - что вы вообще хотите?! у вас просто взаимоисключающие условия. тут или надо что-то узнать заранее, или чего -то из перечисленного захотеть...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
_AHTOXA_
Встал на лапы
Сообщения: 130
Зарегистрирован: Пт янв 21, 2011 14:16:36
Откуда: Уфа
Контактная информация:

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

Сообщение _AHTOXA_ »

Кислый писал(а):задефайнь RUN_FLAG просто на 7.

Поправочка: на 6.
Ибо 0b01000000 == 1<<6.
Аватара пользователя
Кислый
Поставщик валерьянки для Кота
Сообщения: 2095
Зарегистрирован: Чт апр 08, 2010 18:50:01
Откуда: Краснодар
Контактная информация:

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

Сообщение Кислый »

например, GCC вполне позволяет делать локальные массивы с вычисляемым по ходу пьесы размером

вот тут поподробнее. у меня по дефолту установлен GCC ))
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics
Аватара пользователя
Кислый
Поставщик валерьянки для Кота
Сообщения: 2095
Зарегистрирован: Чт апр 08, 2010 18:50:01
Откуда: Краснодар
Контактная информация:

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

Сообщение Кислый »

ARV писал(а):
яснее стало?


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

//1.c
#include <stdio.h>
#include <stdlib.h>
#include "include.h"

int main()
{
    int z;
    z = bla_bla(10);
    printf("%i", z);

    return 0;
}


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

//2.c
#include "include.h"

int bla_bla(int x)
{
    return (3*add(x, x));
}


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

//include.h

int add (int x, int y)
{
    return (x + y);
}


цункции друг друга видят, но не компилится. ссылается на .. да вот

$ gcc *.c -o ./mainRRR
/tmp/cckzpR0R.o: In function `add':
main.c:(.text+0x0): multiple definition of `add'
/tmp/cchkwV7r.o:include.c:(.text+0x0): first defined here
collect2: ld returned 1 exit status
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

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

Сообщение Goodefine »

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

//include.h
#ifndef INCLUDE_H
#define INCLUDE_H

int add (int x, int y);

#endif
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Аватара пользователя
Кислый
Поставщик валерьянки для Кота
Сообщения: 2095
Зарегистрирован: Чт апр 08, 2010 18:50:01
Откуда: Краснодар
Контактная информация:

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

Сообщение Кислый »

так. а как сообщаются два .с файла в одном проэкте ? функции доступны, а переменные и константы - нет ?
RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код
@hobbyelectronics
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

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

Сообщение Goodefine »

Конечно нет. Принцип инкапсуляции. Чтобы никто шаловливыми ручками ничего не испортил. Но можно сделать видимыми с помощью extern...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

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

Сообщение avreal »

ARV писал(а):разве что при использовании расширений стандарта (например, GCC вполне позволяет делать локальные массивы с вычисляемым по ходу пьесы размером).
VLA - Variable-Length Array - это не расширение GCC, а стандарт C99, долгих лет ему жизни.
И в локальных переменных, и в параметрах

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

int foo( int sx, int sy, int array[sy][sx] ) {
    int temp = 0;
    for( int y = 0; y < sy; ++y)
        for( int x = 0; x < sx; ++x )
            temp += array[y][x];
    return temp;
}
Без VLA тут пришлось бы передавать int *array и вручную индексировать.

Просто, как минимум поначал, часть компиляторов, декларирующих соответствие C99, ограничились поддержкой комментариев "стиля С++", объявлением переменных "по месту", включая for( int i =0; и так далее, да inline. На этом фоне полная поддержка C99 в GCC начала казаться расширениями :-)

Вот что gcc расширил, так С99-е понятие _Complex на целочисленные типы:

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

signed char  _Complex a, b, c;

void foo()
{
        a = b * c;
}

avr-gcc -Os -std=c99 -S -mmcu=atmega8 complex.c --pedantic
complex.c:2:1: warning: ISO C does not support complex integer types [-pedantic]
Всего лишь warning, а без --pedantic так молча ест.

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

foo:
   lds r18,b
   lds r24,b+1
   lds r20,c
   lds r19,c+1
   mul r20,r18
   mov r25,r0
   clr r1           ; зря он R1 каждый раз чистит, но это просто недостаток оптимизатора
   mul r19,r24
   mov r21,r0
   clr r1
   sub r25,r21
   sts a,r25
   mul r20,r24
   mov r24,r0
   clr r1
   mul r19,r18
   mov r18,r0
   clr r1
   add r24,r18
   sts a+1,r24
   ret
Куда бы эту гайку М3 прикрутить...
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Ответить

Вернуться в «Разные вопросы по МК»