valera_o
Oct 14 2009, 12:26
При компиляции файла проги, помимо кода, который написан в основном окне, в asm файле появляются макросы инициализации ОЗУ и другие. Как избавиться от этой инициализации, съедается место и по включению, хоть и небольшая, но есть задержка?
rezident
Oct 14 2009, 14:13
После сброса стартап выполняется. Потому, что main это такая же функция как и другие. Перед вызовом main выполняется код, который по крайней мере делает две вещи: а) инициализирует указатель стека и б) обнуляет и/или инициализирует начальными значениями глобальные и статические переменные. Если хотите обойтись без стартапа пишите программу на ассемблере, либо ищите в документации CodeVision описание функции аналогичной IARовской __low_level_init.
IgorKossak
Oct 14 2009, 15:49
Или найдите способ (не знаю как это делается в СodeVision) объявить все глобальные переменные как no init. Стартап будет выполняться гораздо быстрее, но переменные придётся инициализировать вручную.
Насчёт того, что съедается место, то стартап съедает его гораздо меньше, чем совокупный код ручной инициализации.
В конфигурации проекта есть опция использования внешнего стартапа. Создайте свой стартап по образу и подобию Кодевижена, выкинув "лишнее".
valera_o
Oct 15 2009, 11:38
Инициализация переменных - эт нормально. А вот когда "0" записываются во всё ОЗУ... Вот спрашивается зачем это мне, если я сам потом могу очистить именно нужную мне область?
Попробую найти опцию внешнего стартапа. Спасибо за советы.
IgorKossak
Oct 15 2009, 12:27
Цитата(valera_o @ Oct 15 2009, 14:38)

Инициализация переменных - эт нормально. А вот когда "0" записываются во всё ОЗУ... Вот спрашивается зачем это мне, если я сам потом могу очистить именно нужную мне область?
0 записывается не во всё ОЗУ, а только в неинициализированные глобальные переменные.
Если Вы потом всё равно собираетесь это делать, то неужели Вы сделаете это быстрее и/или короче, чем это сделано в стартапе?
In every program the CodeVisionAVR C compiler automatically generates a code sequence to make the following initializations immediately after the AVR chip reset:
1. interrupt vector jump table
2. global interrupt disable
3. EEPROM access disable
4. Watchdog Timer disable
5. external RAM access and wait state enable if necessary
6. clear registers R2 … R14
7. clear the RAM
8. initialize the global variables located in RAM
9. initialize the Data Stack Pointer register Y
10. initialize the Stack Pointer register SP
11. initialize the UBRR register if necessary
The automatic generation of code sequences 2 to 8 can be disabled by checking the Use an External Startup Initialization File check box in the Project|Configure|C Compiler|Code Generation dialog window. The C compiler will then include, in the generated .asm file, the code sequences from an external file that must be named STARTUP.ASM . This file must be located in the directory where your main C source file resides.
You can write your own STARTUP.ASM file to customize or add some features to your program. The code sequences from this file will be immediately executed after the chip reset.
A basic STARTUP.ASM file is supplied with the compiler distribution and is located in the C:\cvavr2\bin\
IgorKossak
Oct 16 2009, 07:37
Цитата(oll @ Oct 15 2009, 21:19)

7. clear the RAM
Вот за такие выходки я и ненавижу некоторых производителей тулчейнов, грубо попирающих стандарты.
valera_o
Oct 16 2009, 08:25
Отлично. Всё нашел.
Но в откомпиленном асм-файле всё равно куча каких-то левых макросов, кроме таблицы векторов, адресов регистров. Еще бы и их попилить, эти самые макросы или хотя бы знать зачем они нужны...
Александр Куличок
Oct 16 2009, 10:41
А какой смысл макросы пилить? они в hex все равно не попадают, если не используются в программе.
valera_o
Oct 16 2009, 12:54
Т.е. в выходном асме макросы есть, а в выходном хексе их нет?
Цитата(valera_o @ Oct 16 2009, 13:25)

хотя бы знать зачем они нужны...
там всякие деления умножения и прочее, если не используются то "в выходном хексе их нет".
valera_o
Oct 16 2009, 14:13
Сурово... Ясненько, спасибо за помощь всем!
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.