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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

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

Сообщение menzoda »

У IAR и Keil есть версии без ограничения по времени, но с ограничением размера кода в 30 Кб, что для большинства задач более-чем достаточно.
Реклама
dzrkot
Открыл глаза
Сообщения: 75
Зарегистрирован: Чт авг 29, 2013 08:02:24

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

Сообщение dzrkot »

menzoda писал(а):У IAR и Keil есть версии без ограничения по времени, но с ограничением размера кода в 30 Кб, что для большинства задач более-чем достаточно.
не для моих будущих, увы
Реклама
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

dzrkot писал(а):как быть?
Eclipse+GCC
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

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

Сообщение BCluster »

Chip115 писал(а):При такой структуре в проекте только текст_бокс.
В приведенном коде есть только создание текстбокса, создания кнопок я не вижу. И зачем кнопку наследовать от формы? Рисуете кнопки там же, где и текстбокс
Chip115 писал(а):В общем создавать формы в дизайнере не для меня и потому пытаюсь научиться создавать форму " в ручную".
Это типа, хочу не как все, сам не знаю зачем, поможите люди добрые? Ерундой не занимайтесь :)
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

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

Сообщение BCluster »

dzrkot писал(а):не для моих будущих, увы
Для крупных коммерческих проектов, предлагаю приобрести IAR :D
Ну либо на gcc перелазить
Реклама
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

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

Сообщение BCluster »

pokk писал(а):Наверное можно как-то в файле линкера добавить секцию и тд.. но мне не сильно охота его изменять.
Вы пишете в область памяти, которая линкером выделена для другой секции. Из-за этого и проблемы. Для таких вещей, которые вам нужны есть область infomem, в нее и пишите.
Реклама
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

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

Сообщение Chip115 »

BCluster писал(а): Это типа, хочу не как все, сам не знаю зачем, поможите люди добрые? Ерундой не занимайтесь :)
Да, ерундой занимаюсь, но разобраться хочется ))
В общем вы правы, затупил ))
Засунул создание кнопки в конструктор формы. Теперь другая проблема. Хочу создать массив кнопок, а среда разработки ругается, мол ссылка на объект не указывает на экземпляр объекта.
Ругается на строку btn[0].Parent = this;
Как можно решить это?
Пока не обращайте внимание на массив из одного элемента ))) Эт для отладки так сделал.

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

using System.IO;
using System.Data;
using System.Drawing;
 
class Program
{
    public static void Main()
    {
        MyForm Calc = new MyForm();
 
        Calc.Height = 300;
        Calc.Width = 200;
        Calc.Text = "Calculator";
        Application.Run(Calc);
    }
}
 
class MyForm : Form
{
    private Button[] btn;
    public MyForm()
    {
        TextBox txtBox = new TextBox();
        txtBox.Parent = this;
        
        btn = new Button[1];
       
        btn[0].Parent = this; // тут ругань
            
        }
       
}
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Аватара пользователя
YS
Друг Кота
Сообщения: 7518
Зарегистрирован: Вс мар 29, 2009 22:09:05
Контактная информация:

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

Сообщение YS »

не для моих будущих, увы
Это что же за проекты, что не влезут в 30 кБ? :shock:

Это должно быть что-то очень серьезное и коммерческое. Для таких IAR и приобрести не грех.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
dzrkot
Открыл глаза
Сообщения: 75
Зарегистрирован: Чт авг 29, 2013 08:02:24

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

Сообщение dzrkot »

YS писал(а):
не для моих будущих, увы
Это что же за проекты, что не влезут в 30 кБ? :shock:
Это должно быть что-то очень серьезное и коммерческое. Для таких IAR и приобрести не грех.
там 4кб для msp430 на сайте написано, про покупку уже не ко мне...)
"A 4 Kbytes code size limitation for traditional MSP430 devices and 8 Kbytes for MSP430X devices."
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

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

Сообщение Chip115 »

Все. разобрался. Спасибо!
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Аватара пользователя
menzoda
Вымогатель припоя
Сообщения: 535
Зарегистрирован: Вт авг 28, 2012 22:21:33

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

Сообщение menzoda »

dzrkot писал(а):там 4кб для msp430 на сайте написано
Хм. Для ARM 30Kb. Я думал для всех архитектур одно ограничение.

Chip115
А зачем тебе вообще массив кнопок? Обычно, для каждого элемента заводится свое свойство. Во-первых, это повысит читаемость кода, ведь каждую кнопку можно обозвать по своему: stopButton, startButton, pauseButton, вместо твоих непонятных buttons[0], buttons[1], buttons[2]. Во-вторых, это стиль де-факто для таких вещей. Ему следуют все инструменты разработки: от древнего борланда до современных Microsoft и Qt.

А так вообще я сам дизайнер не люблю. Мне проще и понятней в коде все объявить. Жалко только, что современные инструменты и фреймворки уже практически не позволяют это сделать.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

А через какой нибудь enum нельзя разве дать имя? button [start]
Размер кода не поменяется, зато читабельность повысится.
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

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

Сообщение Chip115 »

Да, читабельность - одино из важнейших свойств кода. Но так как эта программа одна из первых, которая написана мной, на C# и первая, которая юзает формы, то пока не заморачиваюсь по читабельности )) Хочу понять что к чему.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

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

Сообщение BCluster »

Хоть вы и написали, что разобрались, я прокомментирую ошибку, для будущих поколений :)
Chip115 писал(а): btn[0].Parent = this; // тут ругань
А с чего бы ей не быть тут, если в btn[0] ничего нет? Т.е. массив есть, но пустой.
т.е. до этого должно было быть что-то типа

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

bnt[0] = new Button();
И, как уже выше писали, использование массива здесь совершенно бесполезно.
YS писал(а):Это что же за проекты, что не влезут в 30 кБ?
Бывает :) 256кБ под завязку забито у нас. Но и в правду, коммерческий проект :)
menzoda писал(а):А так вообще я сам дизайнер не люблю. Мне проще и понятней в коде все объявить. Жалко только, что современные инструменты и фреймворки уже практически не позволяют это сделать
Более-менее сложный интерфейс вы "объявлять в коде" будете часами. В дизайнере я это сделаю за 5 минут. И результат ничем отличаться не будет.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Начало вопроса.
Спойлер
pokk писал(а):Как в компиляторе IAR при компиляции разместить структуру по определённому адресу ?
делаю вот так вот

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

#pragma location=0x080E0000
NETCONF	NetConf123={1,2,3,4};

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

typedef struct _NETCONF
{
	unsigned char mac[6];
	unsigned long int IP;
        unsigned int port;
	unsigned long int gateway;
	unsigned long int Mask;
	NET_SNMP SNMP;
	unsigned char bord_status;
        unsigned long int IP_list[4];
}NETCONF;
вроде всё нормально компилятор не ругается но и не размешает по заданному адресу возможно из за того что NetConf123 не где не используется.
Этой переменной хочу просто выделить область памяти в которой будут хранится настройки.
При старте программы я из этой области читаю настройки в переменную NetConf (которая находится в озу) и дальше работаю с ней. А в случае когда надо сохранить настройки пишу из NetConf в NetConf123.

А когда пытаюсь считать NetConf123 в главном цикле то выскакивает ошибка

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

Error[Lp025]: absolute section .data (main.o #128) ([0x080e0000-0x080e004b]) overlaps with absolute section .data (main.o #117) ([0x080e0000-0x080e004b]) 
Наверное можно как-то в файле линкера добавить секцию и тд.. но мне не сильно охота его изменять.
BCluster писал(а):Вы пишете в область памяти, которая линкером выделена для другой секции. Из-за этого и проблемы. Для таких вещей, которые вам нужны есть область infomem, в нее и пишите.
Можно по подробнее про infomem что-то не нашёл такое.
Вроде бы нечего и не сделал, но всё заработало и ошибка не вылазит.

Хотя я так и не понял из за чего она была.
Я писал в начало сектора 11

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

Sector 11 0x080E 0000 - 0x080F FFFF 128 Kbytes
Вот файл линкера.
Спойлер

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

/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x08000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x08000000;
define symbol __ICFEDIT_region_ROM_end__   = 0x080FFFFF;
define symbol __ICFEDIT_region_RAM_start__ = 0x20000000;
define symbol __ICFEDIT_region_RAM_end__   = 0x20020000;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x400;
define symbol __ICFEDIT_size_heap__   = 0x200;
/**** End of ICF editor section. ###ICF###*/


define memory mem with size = 4G;
define region ROM_region   = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFEDIT_region_RAM_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

initialize by copy { readwrite };
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };

place in ROM_region   { readonly };
place in RAM_region   { readwrite,
                        block CSTACK, block HEAP };
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

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

Сообщение BCluster »

Вы не указали процессор, я думал что у вас мсп430 :) Для арма вроде неактуально.
service47
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт мар 12, 2013 16:05:45

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

Сообщение service47 »

Не останавливается ШИМ на ATmega88PA, как остановить?

Код запуска ШИМ:
Спойлер

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

void shim_start()
{
	ASSR=0x00;
	// Установим биты COM1A1-COM1A0:0b10,означает сброс вывода канала A при сравнении Clear OC1A/OC1B on Compare Match, set OC1A/OC1B at BOTTOM (non-inverting mode), for Fast PWM. page135
	TCCR1A |= (1 << COM1A1)|(0 << COM1A0)|(0 << WGM11)|(1 << WGM10);
	// Установим биты WGM13-10:0b0101, согласно таблице это будет режим - Fast PWM, 8-bit, где верхний предел счета задается битом ICR1. page136
	TCCR1B |= (0 << WGM13)|(1 << WGM12)|(1 << CS12)|(0 << CS11)|(0 << CS10);
	// Битами CS12-10:0b100 задаем источник тактового сигнала для таймера МК, clkI/O/256 (From prescaler)=31250Hz. page137
	TCNT1 = 0x00; // начальная установка счетчика
	TIMSK1=0x00;
	ICR1 = 0x20;  //0x20; задаем период ШИМ, здесь у нас число 255,
	// по формуле  fPWM=fclk_I/O/N*(1+ICR1) вычисляем частоту ШИМ, она будет равна 8MHz/256(1+2)=10416Hz
	OCR1A = 0x50; //0x50; начальный коэффициент заполнения ШИМ 0xC8=200, 0x50=1/3
}
Код остановки ШИМ (не работает):
Спойлер

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

void shim_stop()
{
	ASSR=0x00;
	TCCR1A |= (0 << COM1A1)|(0 << COM1A0)|(0 << WGM11)|(0 << WGM10);
	TCCR1B |= (0 << WGM13)|(0 << WGM12)|(0 << CS12)|(0 << CS11)|(0 << CS10);
	TCNT1 = 0x00; // начальная установка счетчика
	TIMSK1=0x00;
	ICR1 = 0x00;  //0x20; задаем период ШИМ, здесь у нас число 255,
	OCR1A = 0x00; //0x50; начальный коэффициент заполнения ШИМ 0xC8=200, 0x50=1/3
	
}
Даташит на ATmega88PA: http://www.atmel.com/images/doc2545.pdf
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

TCCR1A, TCCR1B у вас не сбрасываются. Оператор "|" - побитовое ИЛИ, т.е. в делаете TCCR1A = TCCR1A | 0 (так как (0 << COM1A1)|(0 << COM1A0) и т.д. всегда даст ноль.) То есть, регистры остаются неизменными.

Или сбрасывайте биты как положено (TCCR1A &= ~(1 << x)), или полностью обнуляйте регистр.
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

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

Сообщение zero648 »

service47 писал(а):Не останавливается ШИМ на ATmega88PA, как остановить?

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

	TCCR1A |= (0 << COM1A1)|(0 << COM1A0)|(0 << WGM11)|(0 << WGM10);
	TCCR1B |= (0 << WGM13)|(0 << WGM12)|(0 << CS12)|(0 << CS11)|(0 << CS10);
Эта хрень работать не будет, надо так:

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

TCCR1A=0;
TCCR1B=0;
ICR1 у Вас никак не учавствует нигде, режим не тот.
service47
Прорезались зубы
Сообщения: 219
Зарегистрирован: Вт мар 12, 2013 16:05:45

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

Сообщение service47 »

Спасибо. :)
Ответить

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