реклама на сайте
подробности

 
 
> __low_level_init (void), Объясните пожалуйста
condor
сообщение Dec 1 2005, 21:04
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 93
Регистрация: 18-06-05
Из: Kyiv, Ukraine
Пользователь №: 6 126



Для чего стоит использовать функцию __low_level_init?
В EW430_CompilerReference.pdf я нашел такое:
Customizing system initialization
It is likely that you need to customize the code for system initialization. For example,
your application might need to initialize memory-mapped peripheral units, or omit the
default initialization of data segments performed by cstartup.
You can do this by providing a customized version of the routine __low_level_init,
which is called from cmain before the data segments are initialized. Avoid modifying
the cstartup file directly.


Судя из этого, всю периферию надо инициализировать в __low_level_init.
Объясните, плз, правильно ли я понял?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
VAI
сообщение Sep 4 2006, 11:04
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



Сейчас в один из файлов проекта вставил
Код
/* --- __low_level_init() --------------------------------------------------------------------------------- **
*
* -------------------------------------------------------------------------------------------------------- */
int __low_level_init( void )
{
  /* Insert your low-level initializations here */
  WDTCTL = WDTPW + WDTHOLD;             // Stop WDT


  /*==================================*/
  /* Choose if segment initialization */
  /* should be done or not.  */
  /* Return: 0 to omit seg_init */
  /*        1 to run seg_init */
  /*==================================*/
  return ( 1 );
}

в мар файле появилась строка
Код
  Segment part 21. ROOT.
           ENTRY                   ADDRESS         REF BY
           =====                   =======         ======
           __low_level_init        506A            ?cstart_call_low_level_init (?cstart)
               stack 1 = 00000000 ( 00000002 )

и для main нашел, чтоб ее адрес знать
Код
CODE
  Relative segment, address: 1A10 - 1BA5 (0x196 bytes), align: 1
  Segment part 16.
           ENTRY                   ADDRESS         REF BY
           =====                   =======         ======
           main                    1A10            Segment part 12 (?cstart)
               calls direct
               stack 1 = 00000000 ( 0000000C )


в симуляторе вижу:
Код
001400   3140000A      mov.w   #0xA00,SP
001404   B0126A50      call    #0x506A                 [b]это вызов __low_level_init[/b]
001408   0C93          tst.w   R12
00140A   0F24          jeq     0x142A
00140C   3C400C02      mov.w   #0x20C,R12
001410   3E40B303      mov.w   #0x3B3,R14
001414   B0120A6B      call    #0x6B0A            
001418   3C400002      mov.w   #0x200,R12
00141C   3E40F894      mov.w   #0x94F8,R14
001420   30120C00      push.w  #0xC
001424   B0121C6B      call    #0x6B1C
001428   2153          incd.w  SP
00142A   B012101A      call    #0x1A10                 [b]это вызов main[/b]

Все появилось


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 04:00
Рейтинг@Mail.ru


Страница сгенерированна за 0.01395 секунд с 7
ELECTRONIX ©2004-2016