Вопросы по С/С++ (СИ)
Re: Вопросы по С/С++ (СИ)
У IAR и Keil есть версии без ограничения по времени, но с ограничением размера кода в 30 Кб, что для большинства задач более-чем достаточно.
- Реклама
Re: Вопросы по С/С++ (СИ)
не для моих будущих, увыmenzoda писал(а):У IAR и Keil есть версии без ограничения по времени, но с ограничением размера кода в 30 Кб, что для большинства задач более-чем достаточно.
- unalex
- Мучитель микросхем
- Сообщения: 424
- Зарегистрирован: Сб авг 25, 2007 22:02:05
- Откуда: Германия, Viernheim
Re: Вопросы по С/С++ (СИ)
Eclipse+GCCdzrkot писал(а):как быть?
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
- BCluster
- Собутыльник Кота
- Сообщения: 2512
- Зарегистрирован: Пн апр 06, 2009 19:33:29
- Откуда: Молдова, Кишинев
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
В приведенном коде есть только создание текстбокса, создания кнопок я не вижу. И зачем кнопку наследовать от формы? Рисуете кнопки там же, где и текстбоксChip115 писал(а):При такой структуре в проекте только текст_бокс.
Это типа, хочу не как все, сам не знаю зачем, поможите люди добрые? Ерундой не занимайтесьChip115 писал(а):В общем создавать формы в дизайнере не для меня и потому пытаюсь научиться создавать форму " в ручную".
- BCluster
- Собутыльник Кота
- Сообщения: 2512
- Зарегистрирован: Пн апр 06, 2009 19:33:29
- Откуда: Молдова, Кишинев
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Для крупных коммерческих проектов, предлагаю приобрести IARdzrkot писал(а):не для моих будущих, увы
Ну либо на gcc перелазить
- Реклама
- BCluster
- Собутыльник Кота
- Сообщения: 2512
- Зарегистрирован: Пн апр 06, 2009 19:33:29
- Откуда: Молдова, Кишинев
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Вы пишете в область памяти, которая линкером выделена для другой секции. Из-за этого и проблемы. Для таких вещей, которые вам нужны есть область infomem, в нее и пишите.pokk писал(а):Наверное можно как-то в файле линкера добавить секцию и тд.. но мне не сильно охота его изменять.
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Да, ерундой занимаюсь, но разобраться хочется ))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; // тут ругань
}
}
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
Re: Вопросы по С/С++ (СИ)
Это что же за проекты, что не влезут в 30 кБ?не для моих будущих, увы
Это должно быть что-то очень серьезное и коммерческое. Для таких IAR и приобрести не грех.
Разница между теорией и практикой на практике гораздо больше, чем в теории.
Re: Вопросы по С/С++ (СИ)
там 4кб для msp430 на сайте написано, про покупку уже не ко мне...)YS писал(а):Это что же за проекты, что не влезут в 30 кБ?не для моих будущих, увы![]()
Это должно быть что-то очень серьезное и коммерческое. Для таких IAR и приобрести не грех.
"A 4 Kbytes code size limitation for traditional MSP430 devices and 8 Kbytes for MSP430X devices."
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Все. разобрался. Спасибо!
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
Re: Вопросы по С/С++ (СИ)
Хм. Для ARM 30Kb. Я думал для всех архитектур одно ограничение.dzrkot писал(а):там 4кб для msp430 на сайте написано
Chip115
А зачем тебе вообще массив кнопок? Обычно, для каждого элемента заводится свое свойство. Во-первых, это повысит читаемость кода, ведь каждую кнопку можно обозвать по своему: stopButton, startButton, pauseButton, вместо твоих непонятных buttons[0], buttons[1], buttons[2]. Во-вторых, это стиль де-факто для таких вещей. Ему следуют все инструменты разработки: от древнего борланда до современных Microsoft и Qt.
А так вообще я сам дизайнер не люблю. Мне проще и понятней в коде все объявить. Жалко только, что современные инструменты и фреймворки уже практически не позволяют это сделать.
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
А через какой нибудь enum нельзя разве дать имя? button [start]
Размер кода не поменяется, зато читабельность повысится.
Размер кода не поменяется, зато читабельность повысится.
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Да, читабельность - одино из важнейших свойств кода. Но так как эта программа одна из первых, которая написана мной, на C# и первая, которая юзает формы, то пока не заморачиваюсь по читабельности )) Хочу понять что к чему.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
- BCluster
- Собутыльник Кота
- Сообщения: 2512
- Зарегистрирован: Пн апр 06, 2009 19:33:29
- Откуда: Молдова, Кишинев
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Хоть вы и написали, что разобрались, я прокомментирую ошибку, для будущих поколений 
т.е. до этого должно было быть что-то типа
И, как уже выше писали, использование массива здесь совершенно бесполезно.
256кБ под завязку забито у нас. Но и в правду, коммерческий проект 
А с чего бы ей не быть тут, если в btn[0] ничего нет? Т.е. массив есть, но пустой.Chip115 писал(а): btn[0].Parent = this; // тут ругань
т.е. до этого должно было быть что-то типа
Код: Выделить всё
bnt[0] = new Button();БываетYS писал(а):Это что же за проекты, что не влезут в 30 кБ?
Более-менее сложный интерфейс вы "объявлять в коде" будете часами. В дизайнере я это сделаю за 5 минут. И результат ничем отличаться не будет.menzoda писал(а):А так вообще я сам дизайнер не люблю. Мне проще и понятней в коде все объявить. Жалко только, что современные инструменты и фреймворки уже практически не позволяют это сделать
Re: Вопросы по С/С++ (СИ)
Начало вопроса.
Вроде бы нечего и не сделал, но всё заработало и ошибка не вылазит.
Хотя я так и не понял из за чего она была.
Я писал в начало сектора 11
Вот файл линкера.
Спойлер
pokk писал(а):Как в компиляторе IAR при компиляции разместить структуру по определённому адресу ?
делаю вот так вотКод: Выделить всё
#pragma location=0x080E0000 NETCONF NetConf123={1,2,3,4};вроде всё нормально компилятор не ругается но и не размешает по заданному адресу возможно из за того что NetConf123 не где не используется.Код: Выделить всё
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;
Этой переменной хочу просто выделить область памяти в которой будут хранится настройки.
При старте программы я из этой области читаю настройки в переменную NetConf (которая находится в озу) и дальше работаю с ней. А в случае когда надо сохранить настройки пишу из NetConf в NetConf123.
А когда пытаюсь считать NetConf123 в главном цикле то выскакивает ошибка
Наверное можно как-то в файле линкера добавить секцию и тд.. но мне не сильно охота его изменять.Код: Выделить всё
Error[Lp025]: absolute section .data (main.o #128) ([0x080e0000-0x080e004b]) overlaps with absolute section .data (main.o #117) ([0x080e0000-0x080e004b])
Можно по подробнее про infomem что-то не нашёл такое.BCluster писал(а):Вы пишете в область памяти, которая линкером выделена для другой секции. Из-за этого и проблемы. Для таких вещей, которые вам нужны есть область 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: Вопросы по С/С++ (СИ)
Вы не указали процессор, я думал что у вас мсп430
Для арма вроде неактуально.
Re: Вопросы по С/С++ (СИ)
Не останавливается ШИМ на ATmega88PA, как остановить?
Код запуска ШИМ:
Код остановки ШИМ (не работает):
Даташит на ATmega88PA: http://www.atmel.com/images/doc2545.pdf
Код запуска ШИМ:
Спойлер
Код: Выделить всё
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
}
Re: Вопросы по С/С++ (СИ)
TCCR1A, TCCR1B у вас не сбрасываются. Оператор "|" - побитовое ИЛИ, т.е. в делаете TCCR1A = TCCR1A | 0 (так как (0 << COM1A1)|(0 << COM1A0) и т.д. всегда даст ноль.) То есть, регистры остаются неизменными.
Или сбрасывайте биты как положено (TCCR1A &= ~(1 << x)), или полностью обнуляйте регистр.
Или сбрасывайте биты как положено (TCCR1A &= ~(1 << x)), или полностью обнуляйте регистр.
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: Вопросы по С/С++ (СИ)
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;Re: Вопросы по С/С++ (СИ)
Спасибо. 


