Сам долго вгонял.
Сам долго вгонял.
Это его личные трудности. Я же Вам говорю о языке С как таковом.DX168B писал(а):Добавление ещё одного элемента вызывает нервный тик у компилятора.
«Караул, устал!».DX168B писал(а):Ну и????
Код: Выделить всё
#include <stdio.h>
float arr1[12][3];
float arr2[7][3];
#define PR(a) printf( #a " = %ld\n", a)
int main()
{
PR(sizeof(*arr1));
PR(sizeof(arr1)/sizeof(*arr1));
PR(sizeof(*arr2));
PR(sizeof(arr2)/sizeof(*arr2));
}Как видим, sizeof(*array) для обеих массивов дал 12. Что в точности соответствует 3*sizeof(float) и не имеет ничего общего с размерностью массивов (с первым случайно совпало, о чём я уже сказал).real@REALPC:~/temp$ gcc -O2 -s -o siz siz.c && ./siz
sizeof(*arr1) = 12
sizeof(arr1)/sizeof(*arr1) = 12
sizeof(*arr2) = 12
sizeof(arr2)/sizeof(*arr2) = 7
Код: Выделить всё
#include <stdio.h>
int array[3] = { 10, 11, 12 };
#define PR(a) printf( #a " = %d\n", a )
int main()
{
for( int i = 0; i < sizeof(array)/sizeof(*array); ++i) {
PR( array [ i ] );
PR( i [ array ] );
}
}real@REALPC:~/temp$ gcc -std=c99 -O2 -s -o ar ar.c && ./ar
array [ i ] = 10
i [ array ] = 10
array [ i ] = 11
i [ array ] = 11
array [ i ] = 12
i [ array ] = 12
Код: Выделить всё
#include <stdio.h>
int array[2][3] = {
{ 11, 12, 13 },
{ 21, 22, 23 },
};
#define PR(a) printf( #a " = %d\n", a )
int main()
{
for( int i = 0; i < sizeof(array)/sizeof(*array); ++i) {
for (int j = 0; j < sizeof(*array)/sizeof(**array); ++j ) {
PR( array [i] [j] );
PR( i [array] [j] );
}
}
}real@REALPC:~/temp$ gcc -std=c99 -O2 -s -o ar2 ar2.c && ./ar2
array [j] = 11
i [array] [j] = 11
array [j] = 12
i [array] [j] = 12
array [j] = 13
i [array] [j] = 13
array [j] = 21
i [array] [j] = 21
array [j] = 22
i [array] [j] = 22
array [j] = 23
i [array] [j] = 23
Код: Выделить всё
int main(void)
{
float array[16][3] = {{0.0, 2.5, 0.0},
{0.5, 3.0, 0.0},
{1.5, 3.0, 0.0},
{2.0, 3.5, 0.0},
{2.5, 3.5, 0.0},
{3.0, 3.0, 0.0},
{3.0, 2.0, 0.0},
{2.5, 1.5, 0.0},
{2.5, 0.5, 0.0},
{2.0, 0.0, 0.0},
{0.5, 0.0, 0.0},
{0.0, 0.5, 0.0},
{2.5, 0.5, 0.0},
{2.0, 0.0, 0.0},
{2.5, 0.5, 0.0},
{2.0, 0.0, 0.0}};
int a=0;
a = sizeof(*array);
printf("%d\n", a);
a = sizeof(**array);
printf("%d\n", a);
return 0;
}
Нет!!!IfoR писал(а):Тут что, переменная i вот так вот просту выступает в роли указателя?
Код: Выделить всё
name1 [ name2 ]Код: Выделить всё
* ( name1 + name2 )Код: Выделить всё
name1 [ name2 ]
name2 [ name1 ]Код: Выделить всё
* ( name1 + name2 )
* ( name2 + name1 )ладно,а что за макрос тогда должен быть при?IfoR писал(а):_BV(PD7) - это видимо такой макрос, который делает так: (1<<PD7)
Сам долго вгонял.
Код: Выделить всё
PORTD&=~_BV(PD5);Код: Выделить всё
PORTD&=~(1<<PD5);
Ну тогда все нормально, можно таки идти спатьIfoR писал(а):открыл стандарт, пытаюсь читать
У меня стоит 74HC595 что бы вывести результат нужно подать импульс на защелкуvitalik_1984 писал(а):PORTD&=~_BV(PD7);
разумеется не хочет, т.к. по умолчанию все операнды в выражении приводятся к типу int, а его сдвиг на 32 бита даст в итоге 0, как не крути. вы вообще какой-такой тип данных собрались на 32 разряда двигать? даже long после сдвига на 32 разряда даст всегда 0.alexey6522 писал(а):не хочет сдвигать на 32 бита, меняю 32 на 8 компилируется нормально, но не работает
Код: Выделить всё
{ result = (result>>8)|((long long int)indikator[(unsigned char)(i%10)]<<32); i/=10; }на самом деле надо попробовать задуматься...IfoR писал(а):alexey6522, а если так попробовать...
sfr_defs.h и тамalexey6522 писал(а):У меня стоит 74HC595 что бы вывести результат нужно подать импульс на защелкуvitalik_1984 писал(а):
Код: Выделить всё
/** \def _BV
\ingroup avr_sfr
\code #include <avr/io.h>\endcode
Converts a bit number into a byte value.
\note The bit shift is performed by the compiler which then inserts the
result into the code. Thus, there is no run-time overhead when using
_BV(). */
#define _BV(bit) (1 << (bit))
Код: Выделить всё
void USART_vInit(void) {
// Set baud rate
UBRRH=0;
UBRRL=0x8; //скорость обмена 57600 бод
// Set frame format to 8 data bits, no parity, 1 stop bit
UCSRC = (0<<USBS)|(1<<UCSZ1)|(1<<UCSZ0)|(1<<URSEL); //размер слова 8 разрядов
UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN); //разр. прерыв при приеме, разр приема, разр передачи.
}
void USART_vSendByte(const char *u8Data) {
while (*u8Data) {
while((UCSRA&(1<<UDRE)) == 0); // Wait if a byte is being transmitted
UDR = *u8Data;
u8Data++; // Transmit data
}
}
мда... надеюсь, к велосипеду вы лепите мотор от КРАЗа? ну, чтоб ехал поскорее? может, для начала стоило бы хорошенько изучить матчасть? то есть Си? а то ведь можно сто лет строить допик на песке, а он все равно будет рушиться...alexey6522 писал(а):Это работает! а вот как она вызывается USART_vSendByte("Hello World"); //Отправляем данные в порт
Но так как я работаю с int мне нужно как-то его передать в порт с помощью этой функции, возможно есть и другие способы, но я о них не знаю, по этому пытаюсь приделать к велосипеду мотор, что бы тот поехал....