Ой... я в Си пока буксую... а как речь о плюсах заходит - у меня вообще искры из глаз сыплютсяАlex писал(а):А что если замучить malloc() / free() ?
Ведь даже в плюсах всякие классы, на подобии String, основаны на том же динамическом выделении/освобождении памяти.
Вопросы по С/С++ (СИ)
Re: Вопросы по С/С++ (СИ)
- Реклама
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Функции malloc() и free().
То, что там упоминается С++, не обращайте внимания. В С тоже есть эти функции. Но для их использования, компилятору необходима некая область памяти, называемая кучей (heap), которая обычно настраивается где-то в настройках компилятора.
То, что там упоминается С++, не обращайте внимания. В С тоже есть эти функции. Но для их использования, компилятору необходима некая область памяти, называемая кучей (heap), которая обычно настраивается где-то в настройках компилятора.
- Леонид Иванович
- Друг Кота
- Сообщения: 4779
- Зарегистрирован: Сб апр 02, 2011 12:40:46
- Откуда: Минск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Аллокаторы памяти сами по себе прожорливы, критиковал их как-то: http://leoniv.livejournal.com/193667.html
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Всем привет!
Решил портировать код, который был написан для PIC18 на какой нить STM32F10x и заодно прокачать скилл написания программ на си.
Так вот натнулся на эти строки
Я полагаю что нулевой элемент архива longAddressLocation будет расположен по адресу 0x0E. Так?
В доке на STM32 вот что пишут
The STM32F10xxx features up to 96 Kbytes of static SRAM. It can be accessed as bytes,
half-words (16 bits) or full words (32 bits). The SRAM start address is 0x2000 0000.
Будет ли работать этот кусок кода если я напишу вот так
Решил портировать код, который был написан для PIC18 на какой нить STM32F10x и заодно прокачать скилл написания программ на си.
Так вот натнулся на эти строки
Код: Выделить всё
#pragma romdata longAddressLocation = 0x0E
ROM unsigned char myLongAddress[8] = {EUI_0,EUI_1,EUI_2,EUI_3,EUI_4,EUI_5,EUI_6,EUI_7};
#pragma romdataВ доке на STM32 вот что пишут
The STM32F10xxx features up to 96 Kbytes of static SRAM. It can be accessed as bytes,
half-words (16 bits) or full words (32 bits). The SRAM start address is 0x2000 0000.
Будет ли работать этот кусок кода если я напишу вот так
Код: Выделить всё
#pragma romdata longAddressLocation = 0x2000 0000
ROM unsigned char myLongAddress[8] = {EUI_0,EUI_1,EUI_2,EUI_3,EUI_4,EUI_5,EUI_6,EUI_7};
#pragma romdataТеория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Вопросы по С/С++ (СИ)
а обязательно по определенному адресу? Напишите
const unsigned char myLongAddress[8] = {EUI_0,EUI_1,EUI_2,EUI_3,EUI_4,EUI_5,EUI_6,EUI_7};
будет размещено во флэше, адрес можно получить через указатель
const unsigned char myLongAddress[8] = {EUI_0,EUI_1,EUI_2,EUI_3,EUI_4,EUI_5,EUI_6,EUI_7};
будет размещено во флэше, адрес можно получить через указатель
- Реклама
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
хм. Думал об этом, но индусы из микрочипа не просто так же написали эту фигню?oleg110592 писал(а):а обязательно по определенному адресу? Напишите
const unsigned char myLongAddress[8] = {EUI_0,EUI_1,EUI_2,EUI_3,EUI_4,EUI_5,EUI_6,EUI_7};
будет размещено во флэше, адрес можно получить через указатель
В целом я правильно понял назначение этих строк?
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
© Альберт Эйнштейн
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Вопросы по С/С++ (СИ)
думаю надо почитать документацию к компилятору - для чего нужно #pragma romdata longAddressLocation
Re: Вопросы по С/С++ (СИ)
Гляньте пжалстя... что я такого криминального понаписал?.....
Тут конечно бессмыслица полная... но это из-за того что я лишнее повыкидывал...
Компиль (AVRStudio 4.19) ошибку кажет какую-то необычную... первый раз такую вижу...
И как то странно себя ведет... например если закомментировать i--; то ошибка исчезает



Тут конечно бессмыслица полная... но это из-за того что я лишнее повыкидывал...
Компиль (AVRStudio 4.19) ошибку кажет какую-то необычную... первый раз такую вижу...
И как то странно себя ведет... например если закомментировать i--; то ошибка исчезает
Спойлер
Код: Выделить всё
#include <avr/io.h>
int main (void)
{
uint8_t i, Simb, BufTemp [8];
uint8_t *pBufRead = (uint8_t*) 0;
uint8_t *pBufWrite = (uint8_t*) 0;
long long Parameter = 0;
for (i=8; i; i--){
Parameter *= 10;
Simb = *pBufRead++;
Parameter += (Simb - '0');
}
for (i=0; i<8; i++){
BufTemp [7-i] = Parameter %10 + '0';
Parameter /= 10;
}
i--;
while (i < 8){
*pBufWrite++ = BufTemp [i++];
}
while (1){}
}
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Вопросы по С/С++ (СИ)
не влазит код в мегу8 - надо пожирнее мегу или от long long отказаться:

Спойлер

Последний раз редактировалось oleg110592 Вс ноя 09, 2014 16:13:00, всего редактировалось 1 раз.
Re: Вопросы по С/С++ (СИ)
shads , в сети парсеров GPS как грязи . Смысл городить велосипед ?

Если пытаться в STM32 найти железо от MRF24J40, то никакие skill'ы не помогут.Chip115 писал(а): хм. Думал об этом, но индусы из микрочипа не просто так же написали эту фигню?
В целом я правильно понял назначение этих строк?
Re: Вопросы по С/С++ (СИ)
Вах... я чет и не подумал что long long так убивает, и что причина может быть в этомoleg110592 писал(а):не влазит код в мегу8 - надо пожирнее мегу или от long long отказаться
А как еще можно умножить 8-ми значное число на 0,01666666 т.е. на 1/60, с минимальными потерями ресурса?...
Пробовал так
Код: Выделить всё
Parameter *= 16666666;
Parameter /= 100000000;
Дык парсер то как раз не проблема...dosikus писал(а):shads , в сети парсеров GPS как грязи . Смысл городить велосипед ?
Нужно перевести значение координат из - градусы, минуты - в значение в градусы...
Т.е. по сути то что делает этот калькулятор... http://goondel.ucoz.ru
Re: Вопросы по С/С++ (СИ)
А че, просто поделить нельзя?!
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Вопросы по С/С++ (СИ)
не ради рекламы - интересно было, попробовал задачу shads решить на STM32F030K6T6 ARM Cortex M0, 48МГц, 32кб Flash, 4кб ОЗУ, корпус такой же TQFP32, цена у нас, такая же как и на ATMEGA8, компилятор Keil:
чистый main (только настройки тактовой частоты и стартап):
Program Size: Code=368 RO-data=208 RW-data=0 ZI-data=1024
программа shads
Program Size: Code=888 RO-data=208 RW-data=0 ZI-data=1024
получается эта же программа заняла всего то 520 байт против 9898 байт на AVR
чистый main (только настройки тактовой частоты и стартап):
Program Size: Code=368 RO-data=208 RW-data=0 ZI-data=1024
программа shads
Program Size: Code=888 RO-data=208 RW-data=0 ZI-data=1024
получается эта же программа заняла всего то 520 байт против 9898 байт на AVR
Спойлер

Re: Вопросы по С/С++ (СИ)
Ясный перец... архитектура 32 бита... я бы даже предположил бы, что должно получиться еще меньше чем 520 байт...oleg110592 писал(а):решить на STM32F030K6T6 ARM Cortex M0
Не ну результат AVR меня просто сразил
Re: Вопросы по С/С++ (СИ)
"Пол царства отдаю, и дочьку в жены" токма объясните, что нужно сделать чтобы такой размер получился?!...WiseLord писал(а):это что-то у автора проблемы не так, а не у avr-gcc.
И кстати проверьте пож, сколько покажет, если между первым и вторым циклами for, добавить две строчки:
Код: Выделить всё
Parameter *= 16666666;
Parameter /= 100000000;
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Вопросы по С/С++ (СИ)
да GCC AVR 4.9.2 нормально компилит
пробовал eclipse+AVR plugin+GCC AVR 4.9.2
выше оболочка, я так понял, Qt Creator+GCC AVR
Спойлер

выше оболочка, я так понял, Qt Creator+GCC AVR
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Пожалуйста:

А так - да, в качестве IDE использую Qt Creator. Очень неплохой вариант для linux, всяко шустрее Eclipse.
Явно помимо предоставленного кода где-то в Makefile к проекту подцеплено ещё что-то тяжеловесное, и линковщик не может всё это вместить в 8 кБ.
А так - да, в качестве IDE использую Qt Creator. Очень неплохой вариант для linux, всяко шустрее Eclipse.
Думаю, дело в тех аргументах avr-gcc, что на Ваших скриншотах полностью не видны: -Map=gps_data_to_UART....shads писал(а):"Пол царства отдаю, и дочьку в жены" токма объясните, что нужно сделать чтобы такой размер получился?!...
Явно помимо предоставленного кода где-то в Makefile к проекту подцеплено ещё что-то тяжеловесное, и линковщик не может всё это вместить в 8 кБ.
Re: Вопросы по С/С++ (СИ)
Усохни моя душенька... не верю своим глазам... надо пошшупать... ато ишшо вдруг оптицский обман здрения.....WiseLord писал(а):Пожалуйста:.....
Ануке просканируйте своим зорким взглядом...WiseLord писал(а):Думаю, дело в тех аргументах avr-gcc, что на Ваших скриншотах полностью не видны: -Map=gps_data_to_UART....
Явно помимо предоставленного кода где-то в Makefile к проекту подцеплено ещё что-то тяжеловесное, и линковщик не может всё это вместить в 8 кБ.
Спойлер
А под винду такая игрушка шусествует?WiseLord писал(а):в качестве IDE использую Qt Creator. Очень неплохой вариант для linux, всяко шустрее Eclipse.
- Вложения
-
- 1.gif
- (17.67 КБ) 530 скачиваний
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Вопросы по С/С++ (СИ)
похоже WinAVR это переварить не может - попробуйте сборку AVR GCC
Qt Creator под Windows есть, насчет AVR plugin для него не знаю - придется make файлы писать
Qt Creator под Windows есть, насчет AVR plugin для него не знаю - придется make файлы писать


