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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Встал на лапы
Сообщения: 117
Зарегистрирован: Пн дек 08, 2014 19:45:24
Откуда: Воронеж

Сообщение Голимый »

Пару вопросов: имеет ли право на жизнь такая функция последовательного вывода - hc595send,
и что тут не так синтаксисом? Как ни пробовал - все неправильно!
Вложения
keil_c51.PNG
(39.36 КБ) 377 скачиваний
Трудное детство, стальные игрушки.
Реклама
Модератор
Аватара пользователя
Сообщения: 4618
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля

Сообщение Аlex »

Ну, вообще, функция принимает указатель, а Вы ей значение переменной пихаете.
Мало того, Вы ещё пытаетесь с этим указателем какие-то манипуляции провести, типа сдвигов и т.д...
:facepalm:
Реклама
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="jcxz",url="/forum/viewtopic.php?p=3271803#p3271803"]Т.е. - вы готовы ответить своими деньгами перед заказчиком, что хоть Вы наплевали на требования документации, но ваше поделие будет стабильно работать во всём температурном диапазоне во всём диапазоне питающих напряжений и в течение всего срока службы изделия?
Производитель чипов не гарантирует, а вы готовы гарантировать??? Ну-ну... :music:
Не сравнивайте своё "поделие", слепленное на коленке в гараже и работающее кое-как от случая к случаю как звёзды сложатся, и реально работающее во всех условиях эксплуатации изделие.[/uquote]
Я взял F429 работающий на 300MHz т.к., во-первых, хотел показать, что из флеша работает быстрее даже при 6 WS, во-вторых, он у меня стоит дома в одном девайсе и стабильно на такой частоте работает. Естественно в космос я это устройство запускать не планирую и ни про какие гарантии тут речь не идет. Еще раз, это реальный мк работающий на такой частоте, это должно быть понятно любому хотя бы из того, что я указал конкретное количество тактов затрачиваемое им на выполнение функции. Понятно ведь? А когда тебе говорят, что это сказки, у F429 максимальная частота 180Mhz, еще и минусуют, то получается или я вру, или ошибся и на само деле мк работает на меньшей частоте, но даже в таком случае эти 180MHz на которых гарантируется стабильная работа я притянуть сюда не могу, это вообще тема для другого разговора :)
Опытный кот
Аватара пользователя
Сообщения: 819
Зарегистрирован: Вт окт 23, 2012 13:17:25
Откуда: Прокопьевск

Сообщение Oxford »

Гарвардская архитектура потому что, параллельная выборка флеша и озу. Максимальное быстродействие достигается когда код во флеше, а данные в ОЗУ. Идет параллельная выборка по двум шинам сразу ICODE, DCODE
Инженер R@D

Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

[uquote="ARV",url="/forum/viewtopic.php?p=3271313#p3271313"]огласите хотя бы часть перечня непонятливых компиляторов[/uquote]
вот бы я их помнил)
незабвенный borland turbo C емнип не понимал u, только l.
какой-то из древних тупых компиляторов, которым я в институтское время собирал чото для советского клона mc51, не умел в суффиксы вообще.
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

Сообщение Siarzhuk »

[uquote="Голимый",url="/forum/viewtopic.php?p=3271717#p3271717"]если встречается условие if (byte & 0x80) - что тут с чем сравнивается?[/uquote]
Сравнивается результат битовой операции с нулём. Ввиду отсутствия в каноничненьком С логического типа - всё что не 0 - считается для логических операторов и выражений истиной - остальное ложью. Т.е. ваше выражение эквивалентно if (0 != (byte & 0x80)).
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск

Сообщение Chip115 »

Всем привет!
Подскажите, что значит эта запить?

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

uint8_t buf [] = {
{12 , 18}, 
{11, 28}, 
{13, 15}
};
Из головы взял пример. Встретил в коде примерно такое же. Вроде одномерный массив, но зачем еще скобки?
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

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

Ну или, как минимум, предупреждение, если компилятор настроен не так строго отлавливать ошибки как надо бы.
Контактная информация:
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Сообщение alex_ »

[uquote="Chip115",url="/forum/viewtopic.php?p=3288951#p3288951"]Подскажите, что значит эта запить?[/uquote]
Вообще то тут пытались инициализировать двумерный массив вот только с ошибками, надо было сделать так:

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

uint8_t buf [3][2] = {
{12 , 18}, 
{11, 28}, 
{13, 15}
};
:)
Опытный кот
Аватара пользователя
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Сообщение baghear »

Вообще-то нет, там люди с головы запись брали)))
Помню когда узнал какие бывают радиодетали, то же решил, что не буду изучать чужие схемы, а сразу начну придумывать сам. В общем пока ни одной не придумал, благо хватило ума отказаться от этой идеи))))
Опытный кот
Аватара пользователя
Сообщения: 781
Зарегистрирован: Сб июн 01, 2013 22:24:21
Откуда: ПФО

Сообщение alex_ »

[uquote="Chip115",url="/forum/viewtopic.php?p=3288951#p3288951"]Встретил в коде примерно такое же.[/uquote]
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск

Сообщение Chip115 »

[uquote="alex_",url="/forum/viewtopic.php?p=3290040#p3290040"][uquote="Chip115",url="/forum/viewtopic.php?p=3288951#p3288951"]Подскажите, что значит эта запить?[/uquote]
Вообще то тут пытались инициализировать двумерный массив вот только с ошибками, надо было сделать так:

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

uint8_t buf [3][2] = {
{12 , 18}, 
{11, 28}, 
{13, 15}
};
:)[/uquote]
Спасибо. А доп.скобки для удобства или есть какой-то более сакральный смысл?
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

А как, по Вашему, без скобок различить buf[3][2] и buf[2][3]? Естественно, смысл их как раз в этом.
Спойлер

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

uint8_t buf[4][2][3][5] = {   //    4 группы
  {                           // по 2 группы 
    {                         // по 3 группы
      {43, 122, 43, 81, 28},  // по 5 элементов uint8_t
      {46, 553, 21, 35, 67},
      {42, 169, 60, 31, 98}, 
    },
    {
      {74, 296, 43, 62, 28},
      {54, 323, 21, 33, 89},
      {45, 787, 21, 17, 90},
    },
  },
  {
    {
      {84, 122, 43, 81, 28},
      {74, 553, 21, 35, 67},
      {84, 169, 60, 31, 98},
    },
    {
      {87, 26, 43, 69, 28},
      {95, 33, 21, 32, 89},
      {04, 77, 21, 18, 90},
    },
  },
  {
    {
      {84, 12, 43, 82, 28},
      {74, 53, 21, 35, 67},
      {84, 19, 60, 36, 98},
    },
    {
      {95, 33, 21, 32, 89},
      {87, 26, 43, 69, 28},
      {24, 77, 21, 18, 90},
    },
  },
  {
    {
      {84, 19, 60, 36, 98},
      {84, 12, 43, 82, 28},
      {74, 53, 21, 35, 67},
    },
    {
      {87, 26, 43, 69, 28},
      {04, 77, 21, 18, 90},
      {95, 33, 21, 32, 89},
    },
  },
};
Контактная информация:
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

Сообщение Пока_без_кота »

Доброго времени суток. Раньше жил - не тужил, именовал константы с помощью дефайнов и горя не знал. Сегодня вычитал, что это неправильно, так делают лузеры, и им потом девушки не дают... Надо исправляться :))) Итак, было:

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

#define DEFAULT 100;
Далее в EEPROM объявляется переменная с этим значением:

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

unsigned char EEMEM mode		= DEFAULT;
И все чудесно работает.
Переделал так:

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

const	unsigned 	char	DEFAULT	= 100;
Теперь на строчку с объявлением переменной в EEPROM ругается "error: initializer element is not constant". Компилятор GCC. Что я сделал не так ?
Если что, 5 правило отсюда http://chipenable.ru/index.php/embedded ... rules.html
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Пока_без_кота писал(а):Раньше жил - не тужил, именовал константы с помощью дефайнов и горя не знал. Сегодня вычитал, что это неправильно, так делают лузеры, и им потом девушки не дают...
не читайте глупости
Пока_без_кота писал(а):Переделал так:
вы объявили переменную, которая по умолчанию получает значение 100 и не может быть изменена в дальнейшем.
Пока_без_кота писал(а):Теперь на строчку с объявлением переменной в EEPROM ругается
и правильно делает, так как на этапе компиляции переменные не доступны.

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

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

Сообщение Пока_без_кота »

Спасибо :beer:
Грызет канифоль
Аватара пользователя
Сообщения: 250
Зарегистрирован: Ср янв 17, 2018 13:09:14

Сообщение AndyBig »

ARV писал(а):не читайте глупости
Полностью согласен.

Не извращайтесь, спокойно пользуйтесь #define и дальше :) Только желательно явно указывать тип:

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

#define DEFAULT (unsigned char)100;
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18787
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

AndyBig писал(а):Только желательно явно указывать тип
для констант, укладывющихся в int, не обязательно, а для больших - присоединяюсь к рекомендации.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

Сообщение arkhnchul »

[uquote="Пока_без_кота",url="/forum/viewtopic.php?p=3291108#p3291108"]Теперь на строчку с объявлением переменной в EEPROM ругается "error: initializer element is not constant". Компилятор GCC. Что я сделал не так ?[/uquote]
из стандарта:
All the expressions in an initializer for an object that has static storage duration shall be constant expressions or string literals.
так, к примеру, вполне корректно:

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

static const unsigned int DEF=100;

int main(){
    volatile unsigned int def = DEF;
    return 0;
}
[uquote="Пока_без_кота",url="/forum/viewtopic.php?p=3291108#p3291108"]Если что, 5 правило отсюда http://chipenable.ru/index.php/embedded ... rules.html[/uquote]
вообще там все разумно, но стоит добавить "где это возможно". И компилятор должен быть достаточно мозговитый и со включенными оптимизациями - иначе под эту константу-переменную (она с точки зрения языка таки переменная с неизменным значением) выделится память.
вот тот кусочек кода, gcc с разной оптимизацией
-O0
Спойлер

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

arkhnchul@tween-arkhost:/tmp/ctst$ gcc -O0 -S -c tst1.c -o -
	.file	"tst1.c"
	.section	.rodata
	.align 4
	.type	DEF, @object
	.size	DEF, 4
DEF:
	.long	100
	.text
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	pushq	%rbp
	.cfi_def_cfa_offset 16
	.cfi_offset 6, -16
	movq	%rsp, %rbp
	.cfi_def_cfa_register 6
	movl	$100, %eax
	movl	%eax, -4(%rbp)
	movl	$0, %eax
	popq	%rbp
	.cfi_def_cfa 7, 8
	ret
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (Debian 7.2.0-19) 7.2.0"
	.section	.note.GNU-stack,"",@progbits
-O1
Спойлер

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

arkhnchul@tween-arkhost:/tmp/ctst$ gcc -O1 -S -c tst1.c -o -
	.file	"tst1.c"
	.text
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	movl	$100, -4(%rsp)
	movl	$0, %eax
	ret
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (Debian 7.2.0-19) 7.2.0"
	.section	.note.GNU-stack,"",@progbits
т.е. нужно хотя бы O1
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск

Сообщение Chip115 »

[uquote="alex_",url="/forum/viewtopic.php?p=3290040#p3290040"][uquote="Chip115",url="/forum/viewtopic.php?p=3288951#p3288951"]Подскажите, что значит эта запить?[/uquote]
Вообще то тут пытались инициализировать двумерный массив вот только с ошибками, надо было сделать так:

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

uint8_t buf [3][2] = {
{12 , 18}, 
{11, 28}, 
{13, 15}
};
:)[/uquote]

Вот еще пример

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

static const registerSetting_t preferredSettings[]= 
{
  {CC1101_IOCFG0,      0x06},
  {CC1101_FIFOTHR,     0x47},
  {CC1101_SYNC1,       0x7A},
  {CC1101_SYNC0,       0x0E},
  {CC1101_PKTLEN,      0x14},
  {CC1101_PKTCTRL0,    0x05},
  {CC1101_FSCTRL1,     0x06},
  {CC1101_FREQ2,       0x21},
  {CC1101_FREQ1,       0x62},
  {CC1101_FREQ0,       0x76},
  {CC1101_MDMCFG4,     0xCA},
  {CC1101_MDMCFG3,     0xF8},
  {CC1101_MDMCFG2,     0x16},
  {CC1101_DEVIATN,     0x40},
  {CC1101_MCSM0,       0x18},
  {CC1101_FOCCFG,      0x16},
  {CC1101_AGCCTRL2,    0x43},
  {CC1101_AGCCTRL1,    0x49},
  {CC1101_WORCTRL,     0xFB},
  {CC1101_FSCAL3,      0xE9},
  {CC1101_FSCAL2,      0x2A},
  {CC1101_FSCAL1,      0x00},
  {CC1101_FSCAL0,      0x1F},
  {CC1101_TEST2,       0x81},
  {CC1101_TEST1,       0x35},
  {CC1101_TEST0,       0x09},
};
Видимо по четным индексам идет адрес, по не четным - значение. Скобки для удобства чтения кода. Вроде так.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Контактная информация:
Ответить

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