stm8s103f3p6 с нуля

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

a5021 пишет:

Кто всю эту хрень прочитал и хоть чего-нибудь понял, тот молодец. :)

Вещь хорошая и нужная. Вопрос: как быть со спецификой камней? В ардуине, как вы знаете - под все используемые камни директивами препроцессора решается. Вот что-то бы подобное под STM было бы - цены бы ему не было.

Скажу за себя: вот прямо сейчас есть задача под STM8L написать прошивку, но - вообще не знаю, с какой стороны подступиться, именно из-за зубодробительности. Кстати, пользуясь случаем: может, пнёте в нужном направлении? Надо на одной ноге частотомер сделать (мерять частоту входящего сигнала), с другой - мерять напряжение. С чего начать, собственно? Пните плз деревянного по уши, чтобы полетел в нужное русло.

a5021
Offline
Зарегистрирован: 07.07.2013

Тут специфика STM8S никак не сказывается, т.к. режимы пинов на всей серии выставляются одинаково, т.е. тремя битами в трех регистрах. Прерывания, правда, нужно еще отдельно конфигурить в другом месте, но это тоже не очень сложно. С другой стороны, у  STM8S наиболее интересны только младшие модели, т.ч. потребности учитывать такой спектр, как у атмеги, просто не ожидается.

Частоту измерять удобно таймером в режиме захвата. Тут и с мегой особой разницы нет. Зато результаты на STM8L можно оттаскивать с помощю DMA, что от таймера, что от АЦП, тем самым снижая нагрузку на ядро. Половину времени, а то и больше, пока идет процесс измерений, можно вообще ядро в сон класть с пробуждением по факту получения результата. Ядро жрет дофига и в плане снижения энергопотребления этот прием весьма эффективен.

А вообще я бы посоветовал вам развернуть какой-нибудь ИАР, набросать код мигания диодом и описать весь процесс в отдельной теме, наподобие этой. Там бы и обсуждали по ходу возникновения вопросов. Просто давать правильные советы в неких абстрактных условиях довольно сложно, да и мешать в кучу STM8S и STM8L не совсем хорошо. Они хоть и сильно похожи друг на друга, но есть куча специфики для каждого семейства. Будет возникать путаница.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

a5021 хорошо получилось, а можешь тоже самое, но сгрупировать, перечисли записи возможные для настройки пинов, управления и считывания, мини инструкция

a5021
Offline
Зарегистрирован: 07.07.2013

Так там сверху есть все дифайны для конфигурирования и на вход и на выход. Какие нужно, те бери и добавляй. Самые часто употребимые комбинации битов сведены в дифайны INPUT_MODE и OUTPUT_MODE. Никто не мешает добавить свои, если условия требуют.

Идея то в чем заключалась: режим выставлять набором нужных слагаемых.

Для входа:

INPUT [+PULL_UP или +FLOAT] [+INT или +NO_INT]

для выхода:

OUTPUT [+PUSH_PULL или +OPEN_DRAIN] [+HIGH_SPEED или +LOW_SPEED]

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

Имя порта при использовании макроса нужно указывать одной заглавной буквой. Причем, это именно буква, а не дифайн, переменная или константа.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

А5021, советую присмотреться к этому подходу созджания сложных #define в т.ч. с оператором ## в реализации arhat.h. Там недаром сделано 2 уровня определений, потому что вызов вашего макроса с указанием в параметрах другого макроса приведет к очень "неожиданным результатам", ибо оператор ## блокирует разворачивание макроса из параметров. в общем, оно "работает" до поры до времени ..

a5021
Offline
Зарегистрирован: 07.07.2013

Я этот момент уже кратко оговорил в последнем абзаце предыдущего своего сообщения. Если вы настаиваете, могу дать развернутое пояснение:

- первые два параметра макроса должны быть только литералами. Под литералами здесь нужно понимать значения, состоящие из одной заглавной буквы латинского алфавита на верхнем регистре от A до D для первого параметра (имя порта) и одной цифры от 0 до 7 для второго параметра (номер пина). Указание первых двух параметров иным способом недопустимо.

на третий параметр данные ограничения не действуют и он может быть представлен любым корректным с точки зрения синтаксиса языка Си способом.

ssss
Offline
Зарегистрирован: 01.07.2016

Подобных обёрток в инете хоть пруд пруди и каждая по своему. Хочется абстракции, тогда уже проще на СПЛ мутить, там хоть какая-то унификация. А так, чтобы не изобретать очередной велосипед, проще писать как есть.

  GPIOB->DDR |= GPIO_DDR_0 | GPIO_DDR_1 | GPIO_DDR_2;  // Output mode
  GPIOB->CR1 |= GPIO_CR1_0 | GPIO_CR1_1 | GPIO_CR1_2;  // Push-pull
  GPIOB->CR2 |= GPIO_CR2_0 | GPIO_CR2_1 | GPIO_CR2_2;  // Output speed up to 10 MHz
  GPIOB->ODR = 0;

Оно и места в памяти меньше отъедает.

a5021
Offline
Зарегистрирован: 07.07.2013

С местом вообще вопрос малосущественный. Ну будет по три BSET/BRES на конфигурацию каждого пина, да и фиг с ним. Сколько там тех пинов, в конце концов.

Запись "как есть" страдает плохой читабельностью и не наглядна. Вы привели простой пример, где все пины выставляются одинаково. Нарисуйте тем же способом более сложную инициализацию и убедитесь, что там начинает образовываться каша. Потом можете сравнить:

PIN_MODE(D, 4, INPUT + PULL_UP + INT);               // PD4 -- emergency button
PIN_MODE(D, 5, OUTPUT + PUSH_PULL + LOW_SPEED);      // PD5 -- relay module
PIN_MODE(D, 6, OUTPUT + PUSH_PULL + HIGH_SPEED);     // PD6 -- motor control

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

a5021 если ты уже оформил хедер поделись пожалуйста попробовать. кроме управления пинами и настройки пинов что нибудь еще добавлял?

ssss если есть твой вариант прошу тоже поделится

ssss лично меня унификация не интересует совсем, я других камней использовать не планирую, нужен удобный хедер только для stm8s103f3p6. если понадобится stm32 можно взять STM32F103C8T6. уже все написано. все равно плюсы других камней, и даже этих раскроются только при более глубоком знании микроконтроллеров. лично моя цель не изучить максимально микроконтроллер, или написать универсальный хедер. нет. главное удобство и простота, и чтобы сразу делать устройство, не тратя время на долгое курение даташита. если так глубоко влезать то можно сделать отличный хедер, но ни одного устройства)) тут не вопрос экономии байтов, а времени. надеюсь ты меня понял

 

a5021
Offline
Зарегистрирован: 07.07.2013

jeka_tm пишет:
a5021 если ты уже оформил хедер поделись пожалуйста попробовать. кроме управления пинами и настройки пинов что нибудь еще добавлял?

Нет, я только за пины сподобился. Причем, ничего отдельно не оформлял. Просто вставил блок дифайнов в рабочий код и там откатал. В принципе, оформить отдельным заголовочным файлом ведь не сложно. Давай положу тут, пусть лежит, мож и мне когда понадобиться, если свой потеряю.

#ifndef __PINDEF_INCLUDED
#define __PINDEF_INCLUDED
//
//  definitions to configure a pin in input mode
//

#define INPUT           0
#define FLOAT           0
#define PULL_UP         (1 << 1)
#define NO_INT          0
#define INT             (1 << 0)

  // most common pin settings for input mode
#define INPUT_MODE      PULL_UP

//
//  definitions to configure a pin in output mode
//

#define OUTPUT          (1 << 2)
#define OPEN_DRAIN      0
#define PUSH_PULL       (1 << 1)
#define LOW_SPEED       0
#define HIGH_SPEED      (1 << 0)

  // most common pin settings for output mode
#define OUTPUT_MODE     OUTPUT + PUSH_PULL + HIGH_SPEED

//
//   pin state
//
  
#define LOW             0
#define HIGH            1

  // macro to configure a pin
#define PIN_MODE(PORT, PIN, MODE)\
          P##PORT##_DDR_DDR##PIN = (MODE) >> 2;\
          P##PORT##_CR1_C1##PIN = ((MODE) >> 1) & 1;\
          P##PORT##_CR2_C2##PIN = (MODE) & 1

  // macro to set a pin
#define PIN_WRITE(PORT, PIN, VALUE)\
          P##PORT##_ODR_ODR##PIN = VALUE
                                      
  // macro to get state of a pin
#define PIN_READ(PORT, PIN)\
          P##PORT##_IDR_IDR##PIN

#endif

Сохранить под именем pindef.h и подключать, соответствено, тоже

#include "pindef.h"

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

ssss
Offline
Зарегистрирован: 01.07.2016

jeka_tm пишет:

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

Тогда вам эти хедеры и макросы и не нужны, совсем. Для СТМ8 - СПЛ, для СТМ32 - ХАЛ или ардуина. И время зря тратить не нужно на всякие глупости.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ну может я не так понял. это то о чем ты говоришь?

а инструкции на русском к этому делу есть?)))

 

ssss
Offline
Зарегистрирован: 01.07.2016

a5021 пишет:

С местом вообще вопрос малосущественный. Ну будет по три BSET/BRES на конфигурацию каждого пина, да и фиг с ним. Сколько там тех пинов, в конце концов.

Может быть. Но часто с вопросом места идёт и вопрос скорости выполнения кода.

Цитата:

Запись "как есть" страдает плохой читабельностью и не наглядна. Вы привели простой пример, где все пины выставляются одинаково. Нарисуйте тем же способом более сложную инициализацию и убедитесь, что там начинает образовываться каша.

Каша начнётся, когда к пинам добавятся попытки подобного оформления СПИ, ТИМ или И2Ц. Всех вариантов оно не покроет и придётся возвращаться к регистрам.

Можно привести и другой пример. Это из майна реальной проги.

  Init_TIM1();

  Init_TIM2();  
  Init_TIM3();
    
  Init_TIM4();
  rim();

Ничего лишнего, уровень абстракции достаточно высок. Можно ещё увеличить до

  Init_TIM_all();
  rim();

Но это хорошо когда всё работает, да и для майна больше и не надо. В случае же выявления ошибок и учитывая относительную сложность периферии всё равно придётся спускаться до регистров и битов. И вот здесь чем больше накручено, тем труднее докопаться до истины. Не зря же у многих отладка в СПЛ и ХАЛ просто вызывает шок. Да и мнение "макросы это зло" тоже не на ровном месте образовалось.

ssss
Offline
Зарегистрирован: 01.07.2016

jeka_tm пишет:

ну может я не так понял. это то о чем ты говоришь?

Я давно перестал отслеживать подобное. Как только появились СТМ8 я тоже пытался что-то улучшить, а потом понял что всё это зря и пустая трата времени. Так можно улучшать до бесконечности. Гораздо важнее вникнуть в суть реализации алгоритма проги и юзанию железа по максимуму где это возможно.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

ssss
Offline
Зарегистрирован: 01.07.2016

Не подскажу. СПЛом никогда не пользовался и русскоязычной лит-рой тоже.

a5021
Offline
Зарегистрирован: 07.07.2013

ssss пишет:
Тогда вам эти хедеры и макросы и не нужны, совсем. Для СТМ8 - СПЛ, для СТМ32 - ХАЛ или ардуина. И время зря тратить не нужно на всякие глупости.

В последний раз мне куб сварил 14кб инициализации в исполняемых кодах для камня с 16кб флеша. Нажав на крест я вздохнул и подумал, как хорошо, что это все не у меня.

Понимание устройства SPL не проникает в голову самостоятельно в то время, когда человек спит. Один хрен надо разбираться, что там к чему. Это время. А учитывая, что будущее SPL как-то неожиданно стало пытаться растаять в тумане, время есть смысл пытаться использовать с большей пользой. Тем паче, что былая привлекательность SPL, когда декларировалась некая переносимость между STM8 и STM32, теперь вообще исчезла окончательно.

a5021
Offline
Зарегистрирован: 07.07.2013

ssss пишет:
Может быть. Но часто с вопросом места идёт и вопрос скорости выполнения кода.

Скорости чего? Расставления ног при начальной инициализации? Вот же страсти вы рассказывать мастер.

Цитата:
Каша начнётся, когда к пинам добавятся попытки подобного оформления СПИ, ТИМ или И2Ц. Всех вариантов оно не покроет и придётся возвращаться к регистрам.

У спи и и2с всего несколько параметров, настойка которых покрывает большинство случаев осмысленного использования этих интерфейсов. Обертку написать -- никакой проблемы. С таймерами, разумеется вопрос сложнее.

Цитата:
  Init_TIM1();

  Init_TIM2();  
  Init_TIM3();
    
  Init_TIM4();
  rim();

Ничего лишнего, уровень абстракции достаточно высок.

Капец! Это вообще о чем было? В таком ключе я могу описать фантазию, как я в одиночку одолел звезду смерти.

Цитата:
Не зря же у многих отладка в СПЛ и ХАЛ просто вызывает шок.

Ничего там не вызывает. Я даже как-то пару раз специально компилировал инициализации из под куба, чтобы в отладчике посмотреть, куда они там чего пишут, дабы по референсу лишний раз не шастать.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

a5021 и ssss может хватит. будьте терпимее друг к другу. никто и мысли из вас как будто и не допускает о другом мнении и решении. каждое решение правильное, к тому же на вкус и цвет

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

a5021
Offline
Зарегистрирован: 07.07.2013

jeka_tm пишет:
a5021 и ssss может хватит.

Чего хватит? Я вообще-то вполне серьезные и содержательные вещи говорю.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

я не говорю о смысле, я говорю о том как

ssss
Offline
Зарегистрирован: 01.07.2016

a5021 пишет:

В последний раз мне куб сварил 14кб инициализации в исполняемых кодах для камня с 16кб флеша. Нажав на крест я вздохнул и подумал, как хорошо, что это все не у меня.

Ващета, СТМ для малых камней СТМ32Ф0ХХ и СТМ32Л организовала сниппетсы. А для больших камней, где ЮСБ и прочее, "16кб флеша" уже не имеют никакого значения. Так или иначе, КУБ и ХАЛ есть и юзается народом, а на СПЛе СТМ поставила крест.

Цитата:

Понимание устройства SPL не проникает в голову самостоятельно в то время, когда человек спит. Один хрен надо разбираться, что там к чему. Это время. А учитывая, что будущее SPL как-то неожиданно стало пытаться растаять в тумане, время есть смысл пытаться использовать с большей пользой. Тем паче, что былая привлекательность SPL, когда декларировалась некая переносимость между STM8 и STM32, теперь вообще исчезла окончательно.

Давайте прямо, что ближе к ардуине, СПЛ или самописные велосипеды, которые магическим образом изменяют геометрию колёс на ходу?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

есть требования к разводке для stm8s103f3p6? там вроде дополнительные кондесаторы по питанию должны быть

ssss
Offline
Зарегистрирован: 01.07.2016

Требования типовые, как и к другим МК.

Есть апнота

AN2860 Application note

EMC guidelines for STM8 microcontrollers

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

спасибо. нашел сборник ссылок по stm8

может скинешь пример, чтобы с нуля не разводить

вот кстати одна картинка. из конденсаторов понял минимум 2 конденсатора vcap-vss и vdd-vss

ssss
Offline
Зарегистрирован: 01.07.2016

jeka_tm пишет:

спасибо. нашел сборник ссылок по stm8

Ностальжи! "Да, были люди в наше время..."(с).

Там ещё одна интересная темка есть для почитать.

http://kazus.ru/forums/showthread.php?t=20861

Цитата:

вот кстати одна картинка. из конденсаторов понял минимум 2 конденсатора vcap-vss и vdd-vss

СТМ рекомендует ещё и на РЕСЕТ конденсатор ставить.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

почитаю завтра. поздно уже. по разводке кое что набросал. необходимый минимум

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

сделал печатку, на плате stm8 и uln2003. запаял stm быстро, никаких особых проблемм. но после нее so16 было как слишком просто, как будто километр между ногами))

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

можете объяснить в чем ошибка. не понял

#include "jeka_stm8s.h"
#include <intrinsics.h>
#define   delay_step 200

int mass[4,8]={
  {0,0,1,1},
  {0,0,1,0},
  {0,1,1,0},
  {0,1,0,0},
  {1,1,0,0},
  {1,0,0,0},
  {1,0,0,1},
  {0,0,0,1}
};

int main( void ){
  C7_OUTPUT();
  C6_OUTPUT();
  C5_OUTPUT();
  C4_OUTPUT();
  D4_INPUT_UP();
  D5_INPUT_UP(); 

  
  
  while(1){
    while(D4_READ()){
      int i;
      for(i=0;i<8;i++){
        if(mass[0,i]) C7_HIGH();
        else(C7_LOW());
        if(mass[1,i]) C6_HIGH();
        else(C6_LOW());
        if(mass[2,i]) C5_HIGH();
        else(C5_LOW());
        if(mass[3,i]) C4_HIGH();
        else(C4_LOW());
        __delay_cycles(delay_step);
    }
  }
}

ошибки

Building configuration: Blink - Debug 
Updating build tree... 
 
main.c  
iccstm8.exe C:\Yandexdisk\IAR\STM8S_blink\main.c -e -Ol --no_cse --no_unroll --no_inline --no_code_motion --no_tbaa  
--no_cross_call --debug --code_model small --data_model medium -o C:\Yandexdisk\IAR\STM8S_blink\Debug\Obj --dlib_config D:\ 
IAR_STM8\stm8\LIB\dlstm8smn.h --vregs 16 
 
   IAR C/C++ Compiler V2.20.1.176 for STM8 
   Copyright 2010-2015 IAR Systems AB. 
   Standalone license - IAR Embedded Workbench for STMicroelectronics STM8, 8K KickStart Edition 2.20 
Error[Pe017]: expected a "]" C:\Yandexdisk\IAR\STM8S_blink\main.c 5 
Error[Pe040]: expected an identifier C:\Yandexdisk\IAR\STM8S_blink\main.c 5 
Error[Pe146]: too many initializer values C:\Yandexdisk\IAR\STM8S_blink\main.c 7 
Warning[Pe174]: expression has no effect C:\Yandexdisk\IAR\STM8S_blink\main.c 30 
Warning[Pe174]: expression has no effect C:\Yandexdisk\IAR\STM8S_blink\main.c 32 
Warning[Pe174]: expression has no effect C:\Yandexdisk\IAR\STM8S_blink\main.c 34 
Warning[Pe174]: expression has no effect C:\Yandexdisk\IAR\STM8S_blink\main.c 36 
Warning[Pe223]: function "__delay_cycles" declared implicitly C:\Yandexdisk\IAR\STM8S_blink\main.c 38 
Error[Pe067]: expected a "}" C:\Yandexdisk\IAR\STM8S_blink\main.c 41 
 
Errors: 4 
Warnings: 5 
Error while running C/C++ Compiler 
 
Total number of errors: 4 
Total number of warnings: 5 

ему почему то не нравится запись:

(mass[0,i])? C7_HIGH():C7_LOW();

такое только на ардуине прокатывает чтоли?

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012
Навскидку, потому что редко использую многомерные массивы. Но ArduinoIDE сожрал, то, что я ниже пишу.
Массив у тебя: int mass[8][4]={
И проверку нужно делать примерно так: if(mass[i][0])
 
jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

действительно неправильно объявил массив. спасибо

я делаю дозатор для паяльной пасты. допилить код времени нет, выкладываю пока модели

https://yadi.sk/d/sulg8jcotnHdB

шаговый мотор 28BYJ-48. шпилька М5 и длинная гайка М5

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

Dmitry2018
Offline
Зарегистрирован: 03.05.2018

Приветствую участников форума, вопрос по стандартной библиотеке стм есть, может кто подскажет. Хочу в программе сделать запись "#define RS номер бита регистра ODR GPIOC номер 3" для стандартной библиотеке . В библиотеке IAR много примеров и все просто "#define RS PC_ODR_bit.ODR3". Сама запись получается, но на переменную RS программа ругается. Не могу понять как в стандартной библиотеке обозначить номер бита. Пробовал в программе в другом месте такую запись GPIOB->ODR_BITS.bit4=1 , тоже программа ругается, работает только GPIOB->ODR |= GPIO_DDR_4. Заранее спасибо

b707
Offline
Зарегистрирован: 26.05.2017

Народ, сорри за некропостинг - но интересно продолжить тему. Вижу, что большинство участников ветки еще на форуме.

Вот такой вопрос  - а что уважаемые используют в STM8 вместо millis ? - я понимаю, что очевидный путь - завести свой миллисекундный счетчик на любом из таймеров. Но может в СТМ есть какой-то другой вариант, про который я не в курсе?

ssss
Offline
Зарегистрирован: 01.07.2016

b707 пишет:

а что уважаемые используют в STM8 вместо millis ? - я понимаю, что очевидный путь - завести свой миллисекундный счетчик на любом из таймеров. Но может в СТМ есть какой-то другой вариант, про который я не в курсе?

А что это такое... millis ??? Если нужны обычные тормозные задержки... то пофигу на чём и как... Можно ТИМ4 заюзать... он самый беспонтовый... Всякие фишки и протоколы предпочитаю юзать на таймерах... полуаппаратно...

b707
Offline
Зарегистрирован: 26.05.2017

ssss пишет:

А что это такое... millis ??? Если нужны обычные тормозные задержки... то пофигу на чём и как...

тормозные задержки можно и на пустом цикле делать, как в примерах ИАР-а. 

миллис - счетчик, увеливающийся на 1 каждум миллисекунду, им удобно отмерять относительно большие задержки, для которых аппаратные таймеры слишком быстрые

ssss
Offline
Зарегистрирован: 01.07.2016

А миллис в ардуине на чём сделан... на таймере??? Значит уже ответил... на беспонтовом ТИМ4... в прескалер 128... в регистр перезагрузки 124 (125 - 1)... прерывание через 1мС будет...

b707
Offline
Зарегистрирован: 26.05.2017

Добрый день!

Как в ST Visual Develop посмотреть получившийся после компиляции размер кода и занятое место в памяти? - ну типа как Ардуино ИДЕ пишет в конце компиляции?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014
Компилятор Cosmic? Пишут, что в *.map файле после компиляции смотреть надо. Напрямую вроде не выводит, как в Arduino IDE.
 
 
 
b707
Offline
Зарегистрирован: 26.05.2017

b707 пишет:

Как в ST Visual Develop посмотреть получившийся после компиляции размер кода и занятое место в памяти? - ну типа как Ардуино ИДЕ пишет в конце компиляции?

Отвечаю сам - нужно включить в опциях линкера генерацию .map файла, как описано в конце вот этого мануала: st-visual-develop-ide-sreda-dlya-programmirovaniya-stm8

Информация в файле, правда. не слишком наглядная - но можно написать свой парсер, как пример вот: http://ziblog.ru/2011/09/29/formatirovanie-informatsii-o-razmerah-sektsiy-cosmic.html

b707
Offline
Зарегистрирован: 26.05.2017

Jeka_M пишет:

Компилятор Cosmic? Пишут, что в *.map файле после компиляции смотреть надо

Jeka, спасибо огромное, одновременно ответили :)

b707
Offline
Зарегистрирован: 26.05.2017

продолжаю мучать stm8s103

Скажите, это нормально, что бинарник, скомпилированный STDV Develop (через STD Periph Driver) занимает втрое больше места, чем этот же код от IAR с ИАРовскими хедерами? Дебаг и там и там включен, впрочем в Релизе соотношение такое же.

Код не сложный совсем, блинк на прерывании TIM4 и вывод в сериал.

STDV Develop - 3233 bytes

IAR          1322 bytes

Или я что-то не так делаю? - заметил, что в STDV Develop одна только минимальная настройка системного клока сразу отжирает 1000 байт:

CLK_DeInit();
CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);
CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1); // set 16 MHz for CPU