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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

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

Сообщение ARV »

shads писал(а):В общем извиняюсь за очередной балаган, который я тут развел :).....
балаган начинается с "фигурных скобочек", где не надо, а заканчивается тем, что
shads писал(а):указатель он и в африке указатель... не важно, с PROGMEM он записан, или без...
после чего начинаются чудеса.

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

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Сообщение shads »

ARV писал(а):cоветую вам тщательно изучить Си, чтобы делать не тяп-ляп, а по правилам и с полным пониманием того, что делаешь. собственно, 90% моих советов только в этом и заключаются
Спасибо!!!
Именно этим сейчас и занимаюсь...
Я в принципе сразу сознался в своих грехах: http://radiokot.ru/forum/viewtopic.php? ... 3#p2169843
Но уже кой чего просветлело в голове :).... Так глядишь и C++ штурмовать начну :).....
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

Здравствуйте, подскажите как разместить в структуре строки разного размера. Компилятор CodeVisionAvr
есть такая структура меню

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

typedef  struct PROGMEM{
    void       *Next;
    void       *Previous;
    void       *Parent;
    void       *Child;
    unsigned char     OK;
    unsigned char     ESC;    
    unsigned char     ACTION_NEXT;
    unsigned char     ACTION_DOWN;   	
    unsigned char  Text[41]; 
}  menuItem;
Сделал пару пунктов меню по смотрел подумал что избыточно выделять на текстовую часть 40 байт
Захотел сделать такое что бы при инициализации выделялось место ровно по текстовой части т.е при таком варианте:

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

menuItem        Null_Menu = {(void*)0, (void*)0, (void*)0, (void*)0,0,0,0,0, ""};  
выделилось в озу 8-9 байт на указатели а в текстовой части нечего не было (следующая переменная )

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

menuItem        Null_Menu2 = {(void*)0, (void*)0, (void*)0, (void*)0,0,0,0,0, "1234567"};  
а при таком варианте выделилось 8 байт на указатели и ещё массив со строкой "1234567"
Думал что вот такое изменение unsigned char Text[]; приведёт меня к желаемому результату но нет
после первой инициализации Null_Menu он создаёт массив нулевой размерностью и на все остальные строчки компилятор начинает ругаться "Error: ... included from: shaper.c: too many initializers"
Реклама
Эиком - электронные компоненты и радиодетали
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 960
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда

Сообщение GARMIN »

делай в структуре ссылку на текстовую строку, а строки объявляй отдельно.
Контактная информация:
Реклама
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

Сообщение pokk »

Благодарю за помощь. С указателем на строку получилось.
Открыл глаза
Аватара пользователя
Сообщения: 72
Зарегистрирован: Вт июл 05, 2011 06:04:17
Откуда: барнаул

Сообщение 6Н23П »

здраствуйте
что означает конструкция

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

ADDRESS | 1
, где ADDRESS это допустим адрес микрухи.
например ADDRESS = 0b00000010, то получается что
0b00000010
0b00000001
__________
0b00000011 ?
Встал на лапы
Аватара пользователя
Сообщения: 81
Зарегистрирован: Вт май 08, 2012 23:15:45
Откуда: Санкт - Петербург

Сообщение ua1arn »

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

0b00000011 ?
Да.
Друг Кота
Аватара пользователя
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск

Сообщение WiseLord »

Будь там ADDRESS |= 1 - это бы означало установку 0-го бита ADDRESS в 1.

А так - это всего лишь незавершённое логическое выражение, в результате которого получится некий промежуточный результат - число, равное ADDRESS с точностью до последнего бита, который будет равен 1. А что дальше с этим числом делается - мы не знаем.

Ну, как если бы спросить, что означает ADDRESS + 1.
Контактная информация:
Родился
Аватара пользователя
Сообщения: 6
Зарегистрирован: Чт май 17, 2012 12:49:55
Откуда: from nowhere

Сообщение greenled »

Доброго всем дня! Пишу тут прогу для МК с архитектурой 8051 на Си в Keil, увы, уровень владения языком невысок, но интересует такой вопрос: как ассоциировать с переменной какую-либо ячейку памяти данных? Делать ассемблерную вставку или можно как-то стандартными средствами кейловского си обойтись?
Друг Кота
Аватара пользователя
Сообщения: 20117
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Аааа... зачем?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

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

Сообщение ARV »

greenled писал(а):Доброго всем дня! Пишу тут прогу для МК с архитектурой 8051 на Си в Keil, увы, уровень владения языком невысок, но интересует такой вопрос: как ассоциировать с переменной какую-либо ячейку памяти данных? Делать ассемблерную вставку или можно как-то стандартными средствами кейловского си обойтись?
для MCS51 характерно "сопоставлять" переменные с определенными адресами в ОЗУ. по-моему, в кейле для этого есть расширение в виде "оператора" at или @ - точно не знаю, но вы можете посмотреть в любом хидере на периферию конкретного МК как там определены SFR-регистры, они точно привязаны к адресам...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Родился
Аватара пользователя
Сообщения: 6
Зарегистрирован: Чт май 17, 2012 12:49:55
Откуда: from nowhere

Сообщение greenled »

Gudd-Head, нужно чтобы МК изредка принимал коэффициенты для ацп и хранил у себя во флеше
ARV, адреса SFR регистров есть, но как организовать к ним обращение? постоянно ссылаться на адрес или можно как-то организовать указатель на него?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18788
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

в хидере будет что-то типа такого:
unsigned char PCON at 0xF0;
вот и вам вашу переменную надо будет определить аналогично, например, если ее адрес 0x1A:
unsigned char my_var at 0x1A;
только имейте ввиду, что адрес PCON я просто от фонаря написал - не помню я настоящий.

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

Мой уютный бложик... заходите!
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 20117
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

greenled писал(а):как ассоциировать с переменной какую-либо ячейку памяти данных?
...
МК изредка принимал коэффициенты для ацп и хранил у себя во флеше
О как. Была память данных, стала память программ.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Родился
Аватара пользователя
Сообщения: 6
Зарегистрирован: Чт май 17, 2012 12:49:55
Откуда: from nowhere

Сообщение greenled »

ARV, ок, большущее Спасибо)
Gudd-Head, нет, речь все еще о памяти данных) В даташите она фигурирует как Flash/EE, просто примелькалось
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1525
Зарегистрирован: Чт июн 10, 2010 20:11:19

Сообщение COKPOWEHEU »

На уровне языка Си можно так

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

TYPE *b=0x????; // TYPE заменить на желаемый тип данных
#define A (*b) // обращение будет именно через А
#define B (*(TYPE*)0x????) // или так, если нет желания отъедать память лишней переменной
В С++ вроде есть штатный способ расположения переменной по определенному адресу
Родился
Аватара пользователя
Сообщения: 6
Зарегистрирован: Чт май 17, 2012 12:49:55
Откуда: from nowhere

Сообщение greenled »

COKPOWEHEU, премного благодарен) заработало)
Ответить

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