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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

Сообщение Siarzhuk »

kalobyte писал(а):// Kazakh (Kazakhstan) 0x043f kk-KZ
что-то я не понял, откуда 04?
#define SUBLANG_KAZAK_KAZAKHSTAN 0x01
Aufmerksamkeit über Alles. Гляньте на формат этого ид ещё раз. ;)
0x01 << 10
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)
Реклама
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

и что? :dont_know:
эти цифры мне ни о чем не говорят
https://msdn.microsoft.com/en-us/librar ... 85%29.aspx
вот тут этот макрос
а как руками без него сделать? зачем писать лишний код
тематические ответы только в форуме, в приват не пишите
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

Сообщение Siarzhuk »

kalobyte писал(а):а как руками без него сделать?
искомое число как бы уже пролетало:

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

// Kazakh (Kazakhstan) 0x043f kk-KZ
kalobyte писал(а):зачем писать лишний код
Оригинальный спицылист уже сократил "лишний" код - уж скоро как неделю его хамонокод разгребаете. ;) Хотя он скорее всего тупо в отладчике коды подсмотрел.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

Siarzhuk писал(а):Оригинальный спицылист уже сократил "лишний" код
теперь понятно :evil:
я думал он те коды из таблицы просто взял икаким-то макаром слепил
ну раз макрос делает, то поковыряю его

а как отвязать от новых длл 2013 студии? те ключи не сработали
тематические ответы только в форуме, в приват не пишите
Реклама
Эиком - электронные компоненты и радиодетали
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

Сообщение Siarzhuk »

kalobyte писал(а):а как отвязать от новых длл 2013 студии? те ключи не сработали
Я максимум смог в 2010 проверить - сначала собрал статическую версию в 2008 затем сконвертировал в 2010 - при просмотре в depends.exe зависимостей на msvcrtxxx.dll нету. Попробуйте открыть мой проект (http://siarzhuk.spdns.org/ruslat-2010.zip) в 2013 студии - может поможет разобраться.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)
Реклама
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

посмотрел,, сконвертил проект в 2013
собрал
зависимостей нет, есть только базовый msvcrt
свой проект пересобрал - зависимостей нет:?
хер знает чего ему надо было
поставил мт и зависимость пропала, а в тот раз так же ставил и была :facepalm:
осталось с макросом разобраться
тематические ответы только в форуме, в приват не пишите
Реклама
Открыл глаза
Сообщения: 77
Зарегистрирован: Вт сен 27, 2011 09:27:40

Сообщение Alpout »

Не могу понять, почему не компилируется некоторые строки кода, например сложения умножения? Хотя параметры заданы как

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

9:                 static unsigned char Height,x,y;
Вложения
Безымянный.JPG
(38.49 КБ) 538 скачиваний
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Открыл глаза
Сообщения: 77
Зарегистрирован: Вт сен 27, 2011 09:27:40

Сообщение Alpout »

ARV писал(а):да что тут понимать... лишние они, точнее - не дающие какого-либо результата, вот и не компилируются.
я прообовал их выводить в portc, но ничо не изменилось
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Открыл глаза
Сообщения: 77
Зарегистрирован: Вт сен 27, 2011 09:27:40

Сообщение Alpout »

ARV писал(а):я и говорю, результат этих операций нулевой, вот они и не компилируются. вы подумайте сами...
ну примерно понял, что Вы имеете ввиду. Переменная у присвоил значение TMR0, потому что x ниче не представляет, то есть х=0?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Открыл глаза
Сообщения: 77
Зарегистрирован: Вт сен 27, 2011 09:27:40

Сообщение Alpout »

аа, да точно. Спасибо!
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1288
Зарегистрирован: Пн апр 14, 2008 12:54:35
Откуда: Город ГЕРОЙ Ленинград

Сообщение Волосатый »

Доброго всем вечера!

Не первый день бьюсь с такой неприятной проблемой. Имеем STM32F1xx c подключенной по I2C EEPROM 24c02 (она 256 байт). Для того, что бы писать в нее всякие настраиваемые параметры устройства (это переменные типа uint8_t, uint16_t, uint32_t) завел union вида:
Спойлер

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

union param_type{
	uint8_t raw[8];
	struct{
		uint8_t param_1;
		uint8_t param_2;
		uint16_t param_3_16;	
		uint32_t param_4_32;
	} param;
};
Далее после включения эта структура заполняется из EEPROM и программа с ними работает. Раз в час текущие значения заносятся в EEPROM для поддержания их актуальности. Запись и чтение происходит передачей в функцию работы с I2C указателя на param.raw.
Я заметил, что перед переменой типа uint16_t в EEPROM одна пустая ячейка (она не перезаписывается), перед переменной uint32_t две ячейки. И само собой, от param_4_32 в EEPROM пишется только младший байт. Насколько я понял, считывается из EEPROM туда куда надо. Конечно можно докинуть на объединение еще 3 байта и успокоится, но это будет неэффективное использование EEPROM.
Что это за прикол и как его можно устранить?
Опыт приходит сразу после того, как он был нужен...
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

http://habrahabr.ru/post/142662/ почитайте про выравнивание структур.
Контактная информация:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1288
Зарегистрирован: Пн апр 14, 2008 12:54:35
Откуда: Город ГЕРОЙ Ленинград

Сообщение Волосатый »

Спасибо, хорошая статья. Сделал выравнивание, стало как надо :beer:
Опыт приходит сразу после того, как он был нужен...
Контактная информация:
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

Добрый день, подскажите можно ли программно в текущей функции определить уровень её вложения?
Думал создать переменную и при входе в функцию её инкрементировать, а при выходе декрементировать.
Но выходов может быть много так что не вариант везде ставить. Хочу это по пробовать к отладке прикрутить что бы в Usart выдавался проход программы и можно было визуально видеть что функция завершается корректно.

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

function1=START
	function2=START
		function3=START
		function3=END
	function2=END
function1=END
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

что мешает сделать ОДИН выход из функции, как того требует модульный стиль программирования?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

Сообщение Siarzhuk »

pokk писал(а):подскажите можно ли программно в текущей функции определить уровень её вложения?
Запоминаем адрес локальной переменной из main, в функциях берем адрес местной локальной переменной и чешем по стеку от этого адреса до адреса переменной в main, прикидывая может-ли текущее значение стека быть адресом возврата функции - т.е. лежит-ли оно в сегменте кода. Ну или добавлять всем функциям фейковый параметр с уникальным паттерном и считать количество встреченных паттернов в стеке.
PS: Впрочем, в каждой шутке есть доля шутки. ;)
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)
Мучитель микросхем
Сообщения: 469
Зарегистрирован: Вс авг 30, 2015 03:52:59

Сообщение Pnjom-Penb »

Siarzhuk писал(а):... прикидывая может-ли текущее значение стека быть адресом возврата функции.
Напоминает басню "Волк и ягненок" - "Ты виноват уж потому, что хочется мне кушать смахиваешь на адрес возврата!". В общем - плюс/минус, пальцем в небо. :)))

Если ТСу почему-то не удается ограничиться одним выходом из функции, то он мог бы заменить многофайловым поиском с подстановкой все return'ы на, скажем, RETURN'ы или _return'ы, а их уже определить макросом, который раскрывается либо в return, либо в оператор декремента уровня вложенности, плюс return, в зависимости от того, что выдает "#ifdef _DEBUG_".
Последний раз редактировалось Pnjom-Penb Ср дек 09, 2015 21:50:34, всего редактировалось 1 раз.
Ответить

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