Страница 13 из 386
Re: Вопросы по С/С++ (СИ)
Добавлено: Пт янв 28, 2011 19:42:37
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
Re: Вопросы по С/С++ (СИ)
Добавлено: Сб фев 05, 2011 14:29:07
12val12
как можно задефинить пины портов для пика чтоб можно как в атмегах на CV конекретно управлять пинами на выход
чтобы возможно было писать например
PORTC.3=0;
POPTC.3=A;
Re: Вопросы по С/С++ (СИ)
Добавлено: Сб фев 05, 2011 14:40:41
Gudd-Head
12val12 писал(а):POPTC.3=A
И что, по-вашему, должно произойти, если в третий бит порта С записать "А"?

Re: Вопросы по С/С++ (СИ)
Добавлено: Сб фев 05, 2011 14:47:21
12val12
Gudd-Head писал(а):12val12 писал(а):POPTC.3=A
И что, по-вашему, должно произойти, если в третий бит порта С записать "А"?

А= либо 0 либо 1
цель не писать
if (A) { PORTC=PORTC|0b1 } else {PORTC=PORTC & (~ (0b1}
Re: Вопросы по С/С++ (СИ)
Добавлено: Сб фев 05, 2011 23:53:50
levaclaus
Были у меня часы с ду, добавил в часы термометр, всё работает, показывает, кроме одной мелочи
часы перестали реагировать на нажатие кнопки "настройка". Причём кнопка срабатывает как надо, если мы уже в меню. В меню получается возможно зайти только с пульта ду, где эта кнопка продублирована.
Может кто глянуть прошивку, помочь касяк найдти - вроде скобки не пропустил, ничего не удалил.
во вложении 2 кода - до установки термометра и после
left shift count >= width of type
Добавлено: Вс фев 06, 2011 22:21:19
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
при том что есть
что я делаю не правильно?
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс фев 06, 2011 22:49:19
Кислый
задефайнь RUN_FLAG просто на 7.
и на память.
это
а
это
.. жопа. так тоже не правильно

Re: Вопросы по С/С++ (СИ)
Добавлено: Вс фев 06, 2011 22:52:16
Кислый
так. у меня глобальный вопрос.
обычно в программе я имею один .с и несаколько заголовочных. давно было интересно, как собрать несколько .с в кучу посредством одного заголовочного .h . Я не пойму самого принципа КАК ?
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс фев 06, 2011 23:04:28
ARV
никак. при помощи заголовочников сишные исходники в кучу не собираются

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

Re: Вопросы по С/С++ (СИ)
Добавлено: Вс фев 06, 2011 23:41:39
Кислый
не не не. вы меня не правильно поняли.
я не могу понять вот чего:
Код: Выделить всё
// 1.c
#include ololo.h;
.. blah - blah - blah ..
Код: Выделить всё
// 2.c
#include ololo.h;
.. blah - blah - blah ..
так я в одном из проэктов прикрепил функцию blow_fish'a работает уже пол года, а вот как ? это мне очень интересно.
Re: Вопросы по С/С++ (СИ)
Добавлено: Вс фев 06, 2011 23:52:23
ARV
действительно, мне не понятно, что вам не понятно
хидер - он ведь что делает? он уведомляет компилятор, что такие-то вещи СУЩЕСТВУЮТ и имеют такие-то характеристики (тип, параметры и т.п.). компилятор и компилирует исходники, оставляя по этой информации в нужных местах нужные дыры - адреса для перехода на функции, адреса переменных и т.п. а потом за дело берется компоновщик, который ковыряется во всех объектных файлах проекта, включая системные библиотеки, и ищет все упомянутые в хидерах сущности, помещая на место дыр их адреса или значения... при этом, если надо, прилепляется и код этих сущностей из системных библиотек...
яснее стало?
Re: Вопросы по С/С++ (СИ)
Добавлено: Пн фев 07, 2011 00:02:16
Кислый
нет не стало.. ладно. буду искать что-то посерьезнне из литературы.
появился еще вопрос.
как создать массив необходимой мне длинны, когда длинны массива я не знаю в принципе ( допустим он вычисляется )
т.е. конструкция
int a = 5;
int b[a] = {};
невозможна
при этом нельхочется создавать "массив с запасом", и не хочется использовать new.. я теряю ощущение контроля ситуации.
Re: Вопросы по С/С++ (СИ)
Добавлено: Пн фев 07, 2011 00:06:56
ARV
Кислый писал(а):как создать массив необходимой мне длинны, когда длинны массива я не знаю в принципе ( допустим он вычисляется )
т.е. конструкция
int a = 5;
int b[a] = {};
невозможна
при этом нельхочется создавать "массив с запасом", и не хочется использовать new.. я теряю ощущение контроля ситуации.
во-первых, ваша конструкция и так невозможна в Си, разве что при использовании расширений стандарта (например, GCC вполне позволяет делать локальные массивы с вычисляемым по ходу пьесы размером).
во-вторых, если вы не знаете размер, не хотите делать запас и не желаете использовать динамическое распределение памяти - что вы вообще хотите?! у вас просто взаимоисключающие условия. тут или надо что-то узнать заранее, или чего -то из перечисленного захотеть...
Re: Вопросы по С/С++ (СИ)
Добавлено: Пн фев 07, 2011 00:17:04
_AHTOXA_
Кислый писал(а):задефайнь RUN_FLAG просто на 7.
Поправочка: на 6.
Ибо 0b01000000 == 1<<6.
Re: Вопросы по С/С++ (СИ)
Добавлено: Пн фев 07, 2011 01:09:58
Кислый
например, GCC вполне позволяет делать локальные массивы с вычисляемым по ходу пьесы размером
вот тут поподробнее. у меня по дефолту установлен GCC ))
Re: Вопросы по С/С++ (СИ)
Добавлено: Пн фев 07, 2011 02:08:15
Кислый
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
Re: Вопросы по С/С++ (СИ)
Добавлено: Пн фев 07, 2011 02:25:28
Goodefine
Код: Выделить всё
//include.h
#ifndef INCLUDE_H
#define INCLUDE_H
int add (int x, int y);
#endif
Re: Вопросы по С/С++ (СИ)
Добавлено: Пн фев 07, 2011 02:28:53
Кислый
так. а как сообщаются два .с файла в одном проэкте ? функции доступны, а переменные и константы - нет ?
Re: Вопросы по С/С++ (СИ)
Добавлено: Пн фев 07, 2011 02:34:12
Goodefine
Конечно нет. Принцип инкапсуляции. Чтобы никто шаловливыми ручками ничего не испортил. Но можно сделать видимыми с помощью extern...
Re: Вопросы по С/С++ (СИ)
Добавлено: Пн фев 07, 2011 03:48:20
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 прикрутить...