Страница 1 из 1

Coocox - объем кода и обшибка компиляции.

Добавлено: Ср авг 17, 2016 11:15:35
deemchik
Я начинающий, решил перейти с avr-ов на stm32 и только учусь. :) ( Девайс - STM32F030F4P6. Программатор S-Tlink v2.)
Подскажите, может чего-то не так делаю...
В общем, скачал кокос с сайта версию 1.7.6, установил. Скачал и установил gcc-arm-none-eabi-5_4-2016q2-20160622-win32. В кокосе указал путь компилятора (toolchaine path). В настройках проэкта уровень оптимизации выбрал -Os. Остальные галочки/флажки не трогал. Вернее трогал но, ничего на дало кроме увеличения объема, поэтому вернул назад как было.
Config->Link: галочки Use Memory Layout from..., Discard unused sections, Dont use the standard system startup files. Library= Not use C Library. Все остальное по умолчанию.
Создал пустой проэкт, и перенес из кеила исходники. В загаловках указал инклуды. Компилирую выдает ошибку.

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

c:/arm/coocox/5.4 2016q2/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/bin/ld.exe: test.elf section `.text' will not fit in region `rom'
       [cc] sbrkr.c:(.text._sbrk_r+0xc): undefined reference to `_sbrk'
       [cc] c:/arm/coocox/5.4 2016q2/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv6-m\libg.a(lib_a-sbrkr.o): In function `_sbrk_r':
       [cc] c:/arm/coocox/5.4 2016q2/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/bin/ld.exe: region `rom' overflowed by 13916 bytes
       [cc] collect2.exe: error: ld returned 1 exit status
1. Вылетает ошибка. Я так понял причина в section `.text' will not fit in region `rom' и возможно в region `rom' overflowed by 13916 bytes Хотя в кеиле компилится нормально.
2. Почему этот же проэкт откомпиленный в кейле (V4.74) занимает намного меньше объема!!!???
Program Size: Code=5958 RO-data=314 RW-data=112 ZI-data=1040

Ps. В кокос решил перейти, потому как в кейле у меня возникают проблемы во время дебага (но это другая история и отдельная тема). Да и в кокосе, как говорят объем кода должен быть меньше.
(кокосовский проэкт - черновик прикрепил)

Re: Coocox - объем кода и обшибка компиляции.

Добавлено: Ср авг 17, 2016 12:09:25
Reflector
deemchik писал(а): 2. Почему этот же проэкт откомпиленный в кейле (V4.74) занимает намного меньше объема!!!???
Кокосом не пользуюсь, но если тебе нужны всякие sprintf, то почитай как подключить библиотеку newlib-nano вместо стандартной.

Re: Coocox - объем кода и обшибка компиляции.

Добавлено: Ср авг 17, 2016 12:37:48
Мурик
Кокосом не пользуюсь, но в EmBitz проект нормально собрался.

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

Program size (bytes):    6852
Data size    (bytes):     108
BSS size     (bytes):     112

Total size   (bytes):    7072   (R/W Memory: 220)

=== Сборка закончена: 0 errors, 0 warnings (0 minutes, 2 seconds) ===

Re: Coocox - объем кода и обшибка компиляции.

Добавлено: Ср авг 17, 2016 12:51:19
deemchik
Reflector писал(а):но если тебе нужны всякие sprintf
Блиииин а слона то я и не заметил! :) sprintf!!! Выле-тело из головы! Убрал, размер кода стал
4440, 0, 80, 4520 11a8. Спасибо!!! Пошел разбираться, повыскакивали другие глюки, тех, что в кеиле на было.

Re: Coocox - объем кода и обшибка компиляции.

Добавлено: Ср авг 17, 2016 12:58:15
deemchik
Мурик писал(а):Кокосом не пользуюсь, но в EmBitz проект нормально собрался.
Хм. EmBitz - Вы о нем упоминаете 2-й раз, а я из выду выпускаю. Пойду-ка посмотрю с чем его едят...

Re: Coocox - объем кода и обшибка компиляции.

Добавлено: Ср авг 17, 2016 13:24:57
Мурик
Reflector писал(а):всякие sprintf
Кстати да, в EmBitz компилируется потому что по умолчанию sprintf не поддерживает float. Если же в настройках линкера отметить "Use float printf with Nano-branch" то уже не создается прошивка.

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

region `ROM' overflowed by 4736 bytes
=== Сборка закончена: 2 errors, 0 warnings (0 minutes, 2 seconds) ===
Думаю всем изместно что в STM32F030F4P6 на самом деле 32 КБ flash :) и небольшая коррекция файла stm32f030f4_flash.ld

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

ROM  (rx) : ORIGIN = 0x08000000, LENGTH = 32K
позволит использовать всю память. :)

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

Program size (bytes):   21120
Data size    (bytes):     164
BSS size     (bytes):     112

Total size   (bytes):   21396   (R/W Memory: 276)
=== Сборка закончена: 0 errors, 0 warnings (0 minutes, 3 seconds) ===
Наверняка в кокосе можно сделать тоже самое (либо отключить поддержку float для printf, либо увеличить доступную память до 32 КБ, или то и другое). :)

Re: Coocox - объем кода и обшибка компиляции.

Добавлено: Ср авг 17, 2016 16:35:37
deemchik
keil тоже раздувает sprintf если в коде встретиться %f. Этот случай меня и отвлек при копипасте в кокос.
А вот о flash в 32kb это уже для меня новость! Спасибо за "открытие"!!! Я чуть больше месяца с стм-ми воюю. Пытаюсь проэкт от mega8 пересилить с мудификацией. Пришлось менять/допиливать работу с ds18b20, находил только 1 уст-во. Но после добавления обработки кнопок, начались непонятки с переменными. Потому и решил параллельно пробовать в кокосе или... (в air что-то не пошло,не стал разбираться) скорее тот же sprintf.

Re: Coocox - объем кода и обшибка компиляции.

Добавлено: Ср авг 17, 2016 17:51:23
Мурик
deemchik писал(а):А вот о flash в 32kb это уже для меня новость!
Тогда еще скажу что в STM32F030F4P6 есть таймер Tim2 о котором ни слова в даташите. Похоже что STM32F030F4P6 на самом деле это STM32F031F6P6. :))) Такие недокументированные возможности не редкость в STM32 http://we.easyelectronics.ru/pteriks/re ... stm32.html
deemchik писал(а):Пытаюсь проэкт от mega8 пересилить с мудификацией. Пришлось менять/допиливать работу с ds18b20
Возможно имеет смысл изменить метод работы с 1-Wire, подключив его к USART. Эта тема не раз обсуждалась http://we.easyelectronics.ru/STM32/stm3 ... e-dma.html
Адаптированный код для STM32F030F4P6 :) http://purebasic.mybb.ru/viewtopic.php?id=574

Re: Coocox - объем кода и обшибка компиляции.

Добавлено: Чт авг 18, 2016 07:21:19
deemchik
Мурик писал(а): есть таймер Tim2 о котором ни слова в даташите.
Таки да в даташите ни намека. А в keil в файле stm32f0xx_tim, конкретно сказано :))
  • * @brief Initializes the TIMx Time Base Unit peripheral according to
    * the specified parameters in the TIM_TimeBaseInitStruct.
    * @param TIMx: where x can be 1, 2, 3, 6, 7, 14, 15, 16 and 17 to select the TIM
    * peripheral.
    * @note TIM7 is applicable only for STM32F072 devices
    * @note TIM6 is not applivable for STM32F031 devices.
    * @note TIM2 is not applicable for STM32F030 devices.
    * @param TIM_TimeBaseInitStruct: pointer to a TIM_TimeBaseInitTypeDef
    * structure that contains the configuration information for
    * the specified TIM peripheral.
    * @retval None
А в кокосовском stm32f0xx_tim - тоже ни слова :)
Возможно имеет смысл изменить метод работы с 1-Wire, подключив его к USART. Эта тема не раз обсуждалась
Да-да, я эту тему первую проштудировал. Но засомневался из-за объема кода, USART, DMA, побоялся, что не впишусь в 16к. А благодаря Вашей последней ссылке, все-таки попробую.

Re: Coocox - объем кода и обшибка компиляции.

Добавлено: Чт авг 18, 2016 19:00:23
dosikus
Без спл и калокуб влезет и дма и усарт и фатфс и еще до хрена чего.