21.11.2013, 11:16
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
|
Re: IAR Embedded Workbench
Сообщение от SasaVitebsk
|
Должен признать, что IAR более строго подходит. В некоторых местах, там где GCC молчит IAR ругается.
|
Это из-за встроенной MISRA, если следовать её правилам, то и в GCC нужно текст править.
Цитата:
|
В одном случае из под IAR я не смог сделать то, что смог под GCC. По-моему инициализацию структуры, если последний элемент в ней массив строк символов. IAR требовал явного указания длины строки. GCC пропустил и работал правильно.
|
На то они и разные компиляторы, чтобы отличаться друг от друга.
|
|
|
|
22.11.2013, 10:12
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: IAR Embedded Workbench
Да естественно. Я абсолютно без истерики отношусь к тому или иному событию.
Вообще программист должен видеть, да и видит дальше, чем простой эксплуатационщик. Общаясь с заказчиками ты постепенно становишься спокойным как удав. ![Очень смешно](images/smilies/icon_veryhappy.gif) И приучаешься смотреть на свою программу со всех сторон. Ну а заодно и на чужую ... ![Подмигивание](images/smilies/icon_wink.gif)
Сейчас процессора такие, что вылизывать до такта нецелесообразно. Значительно эффективнее обращать внимание на удобство построения программы. Возможность заимствования наработок в одном проекте для другого. Возможность развития и сопровождения. Ничто не даётся бесплатно. Если ты применяешь ОС, то ясно что будут накладные расходы. Если применяешь драйвера с иерархией, то понятно что будут накладные расходы. Если пишешь какие-то вещи универсально, то ясно что будет избыточность. И здесь нужно искать компромисс.
А задача типа того:
Код:
|
// хранится во флэши
typedef const struct
{
const int8_t* Index; // Указатель на редактируемый параметр/ смещение для каналов
const uint16_t Number; // Число пунктов
const uint16_t Ch; // 0/ Указатель на канал
const uint16_t typeEditing; // возможножность редактирования
void (*savefunc)(void); // Указатель на функцию записи редактируемых параметров
const char* const* ItemName; // Указатель на имена пунктов
} RadioBtn_t; |
Код:
|
//************************************************** *************
// @@ 184.
RadioBtn_t rbtTelesign1 = // Меню "Алгоритм работы"
{
(const int8_t*)&telesign[0].revim, // Указатель на редактируемое значение
3,0, // Всего 3 пункта, прямое
ALLEDIT, SaveGlobalSetting, // Редактировать можно без пароля, сохранять
strAlgor
}; |
Код:
|
const char* const strAlgor[3] = {"Стандарт. алгоритм","Расшир. алгоритм","по кнопке 'Enter'"}; |
Так работает IAR.
GCC, естественно так тоже будет, но позволяет массив strAlgor прямо вписывать в структуру. То сути, если я правильно понимаю + 1 указатель получается.
IAR позволяет напрямую сделать, но требует тогда явного указания длины строки. Не могу понять почему (да и не стремился, если честно). То ли он непосредственно строки вписывает в структуру?. GCC похоже стандартно подходит. То есть строки куда-то пихает а в структуру указатели суёт.
Собственно потери небольшие и я остановился на том, что вы видите
|
|
|
|
22.11.2013, 17:47
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: IAR Embedded Workbench
Да, действительно - несмотря на включённую "C99", компилятор этого не понимает. Слажали, значит.
______________
P.S. А вы всё ещё хардкорные табуляции используете?!
__________________
There's always more than one way to skin a cat.
|
|
|
|
22.11.2013, 20:19
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
|
Re: IAR Embedded Workbench
Сообщение от SasaVitebsk
|
Вообще программист должен видеть, да и видит дальше, чем простой эксплуатационщик.
|
Иногда лучше не смотреть что генерирует ИАР, под STM8 в частности. Сам знаешь, писАл же под STM8S20x (и говорил что последний раз). Я понимаю, что платформа молодая и мало кто поддерживает, но голова же не только чтобы траву курить, иначе ни чем такое говноляпство со стороны ИАР объяснить нельзя.
Цитата:
|
Сейчас процессора такие, что вылизывать до такта нецелесообразно. Значительно эффективнее обращать внимание на удобство построения программы. Возможность заимствования наработок в одном проекте для другого. Возможность развития и сопровождения. Ничто не даётся бесплатно.
|
Это не повод для говнокода, который генерирует компилятор ИАР под STM8, тем более не бесплатно, что тогда требовать от юзеров. И дело здесь не вопросах, не в документации и не в переводах.
|
|
|
|
23.11.2013, 20:22
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: IAR Embedded Workbench
Уже не вижу смысла в восьмибитниках. Умудрился заложить в одном месте. Там и STM накосячил. Руки дойдут, переработаю.
|
|
|
|
23.11.2013, 20:36
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,431
Сказал спасибо: 0
Сказали Спасибо 385 раз(а) в 254 сообщении(ях)
|
Re: IAR Embedded Workbench
Сообщение от SasaVitebsk
|
Там и STM накосячил.
|
А что именно, если не секрет?
|
|
|
|
26.11.2013, 15:16
|
|
Временная регистрация
Регистрация: 04.02.2013
Сообщений: 78
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: IAR Embedded Workbench
Сообщение от oleg110592
|
отладка - можно и в иаре - Ctrl+D
Tools--›Options...
|
У меня так и не получилась отладка.
|
|
|
|
26.11.2013, 16:11
|
|
Гражданин KAZUS.RU
Регистрация: 05.04.2009
Сообщений: 976
Сказал спасибо: 35
Сказали Спасибо 155 раз(а) в 134 сообщении(ях)
|
Re: IAR Embedded Workbench
Сообщение от ua3rad
|
У меня так и не получилась отладка
|
что-то не так настроено - почему в дебаге загружается hex. Так примерно должно быть:
Цитата:
|
Loaded debugee: D:\Work\IarAVR.wrk\Example\TestDebug\Debug\Exe\Tes tDebug.d90
|
и русские имена в путях лучше не использовать.
Настройки линкера у меня:
|
|
|
|
27.11.2013, 08:31
|
|
Временная регистрация
Регистрация: 04.02.2013
Сообщений: 78
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: IAR Embedded Workbench
Сообщение от oleg110592
|
что-то не так настроено - почему в дебаге загружается hex. Так примерно должно быть:
и русские имена в путях лучше не использовать.
Настройки линкера у меня:
|
Теперь понял. Я в опциях установил выходной файл hex, а d90 у меня не было. Спасибо
|
|
|
|
08.03.2014, 17:41
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
|
Re: IAR Embedded Workbench
Пытаюсь "затолкать" программу в 1к.
Как понять, почему пишется разная длина кода?
Компилятор IAR C/C++ Compiler V5.51.0.50312/W32 for Atmel AVR
МК ATtiny13a, язык С.
Ассемблерный файл листинг main.lst пишет
831 bytes of CODE memory (+ 6 bytes shared)
17 bytes of DATA memory (+ 19 bytes shared)
Код:
|
Segment part sizes:
Function/Label Bytes
-------------- -----
_A_TIMSK0 1
_A_OCR0A 1
_A_MCUCR 1
_A_TCCR0B 1
_A_OSCCAL 1
_A_TCCR0A 1
_A_EEAR 2
_A_EEDR 1
_A_EECR 1
_A_PORTB 1
_A_DDRB 1
_A_PINB 1
_A_DIDR0 1
_A_ACSR 1
_A_ADMUX 1
_A_ADCSRA 1
_A_ADC 2
init 98
main 60
adc_read_channel 16
adc_data 138
calibr 112
mppt 66
checkOCR0A 32
Led_mode 60
T0_OVER 190
watt 17
watt_last
delta
OffVolt1
OffVolt2
f_calibr
cnt_int
cnt_int_H
Led_period
voltAKK
ampAKK
ampSLR
voltSLR
i
EEPROM_write 20
EEPROM_read 14
??T0_OVER??INTVEC 6 2
?‹Initializer for watt› 17
?‹Constant {0, 0, 0, 0}› 8
Others 4
19 bytes in segment ABSOLUTE
806 bytes in segment CODE
4 bytes in segment INITTAB
2 bytes in segment INTVEC
8 bytes in segment NEAR_F
17 bytes in segment TINY_I
17 bytes in segment TINY_ID
831 bytes of CODE memory (+ 6 bytes shared)
17 bytes of DATA memory (+ 19 bytes shared)
Errors: none
Warnings: none |
Файл module.map пишет
987 bytes of CODE memory (+ 12 range fill )
51 bytes of DATA memory (+ 19 absolute )
Код:
|
****************************************
* *
* SEGMENTS IN ADDRESS ORDER *
* *
****************************************
SEGMENT SPACE START ADDRESS END ADDRESS SIZE TYPE ALIGN
======= ===== ============= =========== ==== ==== =====
INTVEC CODE 00000000 - 00000007 8 com 1
?FILL1 CODE 00000008 - 00000013 C rel 0
INITTAB CODE 00000014 - 00000017 4 rel 0
CODE CODE 00000018 - 000003D5 3BE rel 1
TINY_ID CODE 000003D6 - 000003E6 11 rel 0
ABSOLUTE DATA 0000001C rel 0
DATA 0000001D
DATA 0000001E
DATA 00000024 - 00000028 5
DATA 00000034 - 00000034 1
DATA 00000036 - 00000038 3
DATA 0000003C - 0000003F 4
DATA 0000004F - 0000004F 1
DATA 00000051 - 00000051 1
DATA 00000053 - 00000053 1
DATA 00000055 - 00000056 2
DATA 00000059 - 00000059 1
TINY_I DATA 00000060 - 00000070 11 rel 0
CSTACK DATA 00000071 - 00000080 10 dse 0
RSTACK DATA 00000081 - 00000092 12 dse 0
****************************************
* *
* END OF CROSS REFERENCE *
* *
****************************************
987 bytes of CODE memory (+ 12 range fill )
51 bytes of DATA memory (+ 19 absolute )
Errors: none
Warnings: none |
Где правда и какова длина кода на самом деле?
__________________
Мелочи не решают главного. Они решают всё!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Подниму тему WinAVR vs IAR
|
oleg110592 |
Микроконтроллеры, АЦП, память и т.д |
5 |
24.10.2015 14:06 |
Часовой пояс GMT +4, время: 05:24.
|
|