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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> atmega88pa, принудительный сборос - програмно
max_mart
сообщение Oct 8 2012, 09:06
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



всем привет,

Необходимо ресетить мегу. Как это можно реализовать через проограмму, принудительно по необходимости, например, при проверке одного флага, в определенный момент времени?
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Oct 8 2012, 09:40
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



Соеденить какую-нибудь ногу GPIO с RESET, не?
Go to the top of the page
 
+Quote Post
kovigor
сообщение Oct 8 2012, 10:07
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(max_mart @ Oct 8 2012, 12:06) *
Необходимо ресетить мегу. Как это можно реализовать через проограмму, принудительно по необходимости, например, при проверке одного флага, в определенный момент времени?

Посредством WatchDog ...
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Oct 8 2012, 10:12
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(max_mart @ Oct 8 2012, 13:06) *
Необходимо ресетить мегу. Как это можно реализовать через проограмму, принудительно по необходимости, например, при проверке одного флага, в определенный момент времени?

Завести Watchdog, и по необходимости "например, при проверке одного флага" уйти в бесконечный цикл.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Oct 8 2012, 10:48
Сообщение #5


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Ззапретить прерывания, завести Watchdog на самую короткую продолжительность, и только после этого уйти в бесконечный цикл.
Например так:
Код
void Reset()
{
  __disable_interrupt();
  WDTCSR |= (1<<WDCE) | (1<<WDE);
  WDTCSR = (1<<WDE);  // 16 ms
  for(;;);
}

(только это не для ATmega88pa писано).
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Oct 8 2012, 11:44
Сообщение #6


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Под avr-gcc для любых AVR.
Код
static inline void NORETURN mcu_reset(void)  {wdt_enable(WDTO_15MS); cli(); for(;;);}

Пора бы уже эту фишку в avr-libc реализовать...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
max_mart
сообщение Oct 8 2012, 11:50
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



спасибо огромное
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 8 2012, 12:41
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(max_mart @ Oct 8 2012, 15:06) *
...принудительно по необходимости, например, при проверке одного флага, в определенный момент времени?

Цитата(RabidRabbit @ Oct 8 2012, 15:40) *
Соеденить какую-нибудь ногу GPIO с RESET, не?
Лучший вариант, ибо это будет как раз в определенный момент времени, а не после того как WDT сработает через определенный момент времени после определенного момента времени.


--------------------
Go to the top of the page
 
+Quote Post
V_G
сообщение Oct 8 2012, 13:28
Сообщение #9


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

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Цитата(prottoss @ Oct 8 2012, 22:41) *
Лучший вариант, ибо это будет как раз в определенный момент времени, а не после того как WDT сработает через определенный момент времени после определенного момента времени.

Ну, и здесь этот определенный момент также не очень-то определен, с учетом минимально допустимого времени сброса (2,5 мкс по даташиту), с учетом работы внутреннего счетчика задержки ресета, а также с учетом того, что при срабатывании ресета сигнал порта, вызывающего ресет, тоже сбрасывается.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 8 2012, 14:07
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(V_G @ Oct 8 2012, 19:28) *
Ну, и здесь...
Согласен, все в мире относительно sm.gif Просто в случае с WDT ко всем выше перечисленным задержкам прибавляется минимальное время реакции WDT.


--------------------
Go to the top of the page
 
+Quote Post
max_mart
сообщение Oct 8 2012, 15:15
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



Ram и все регитсры сбрасываются или сохраняются значения, при сбросе от WDT?
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 8 2012, 15:26
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(max_mart @ Oct 8 2012, 21:15) *
Ram и все регитсры сбрасываются или сохраняются значения, при сбросе от WDT?
Сброс по WDT работает так же как и сброс от внешнего RESET. Все регистры и порты ВВ принимают начальное значение описаное в даташите на МК. SRAM не изменится.


--------------------
Go to the top of the page
 
+Quote Post
max_mart
сообщение Oct 8 2012, 15:57
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



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

правильно я говорю?
И переменная сохранит свое значение до ресета?
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 8 2012, 16:00
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(max_mart @ Oct 8 2012, 21:57) *
т.е. значит флаги и некоторые переменные придется обнулять самому, поскольку я их в SRAM разместил

правильно я говорю?
И переменная сохранит свое значение до ресета?
Ну да. А разве при инициализации программы у Вас флаги не устанавливаются в какое то дефолтное значение? Типа:
Код
unsigned int g_Flag_1 = 0x0000;
unsigned int g_Flag_2 = DEF_FLAG_A | DEF_FLAG_B;


void main(void)
{
...
}


--------------------
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 8 2012, 16:02
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(max_mart @ Oct 8 2012, 18:57) *
т.е. значит флаги и некоторые переменные придется обнулять самому, поскольку я их в SRAM разместил
правильно я говорю?

А обычно вы их сами обнуляете? Или в стартапе они обнуляются?
Сброс по WDT аналогичен обычному, то есть всё пойдёт по тому же сценарию.
Go to the top of the page
 
+Quote Post
max_mart
сообщение Oct 8 2012, 16:30
Сообщение #16


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



Ну я обычно сразу в переменную 0х00 прописываю при ее инициализации.
Например:
volatile unsigned char example=0x00;
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 8 2012, 16:34
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(max_mart @ Oct 8 2012, 22:30) *
Ну я обычно сразу в переменную 0х00 прописываю при ее инициализации
Вот Вы и ответили на свой вопрос - программа ведь после ресета стартует. Она все сделает, что Вы прописали в тексте программы.


--------------------
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 8 2012, 16:47
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(max_mart @ Oct 8 2012, 19:30) *
volatile unsigned char example=0x00;

Совершенно излишне:
Код
volatile unsigned char example;

тот же результат даст.
Go to the top of the page
 
+Quote Post
max_mart
сообщение Oct 8 2012, 16:59
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



Артем
Т.е. вы хотите сказать, что она все время будит инициализироваться нулевой при самом первом запуске(по питанию)? А не может быть такого, что там может быть записан мусор, а у меня по этой переменной важное событие должно пройти, и тогда что? А мне необходимо, чтобы при самом первом запуске она именно нулевая была!
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Oct 8 2012, 17:06
Сообщение #20


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Во-первых, обнулять глобальные (не локальные!) переменные компилятор Си должен согласно спецификации.
А во-вторых, если переменная прямо такая важная, её изначально привести в нужное состояние можно и руками.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 8 2012, 17:20
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(max_mart @ Oct 8 2012, 19:59) *
хотите сказать, что она все время будит инициализироваться нулевой при самом первом запуске(по питанию)?

При любом перезапуске так будет (они все через один вектор идут).

Цитата(max_mart @ Oct 8 2012, 19:59) *
А не может быть такого, что там может быть записан мусор

Не может такого быть, если условия эксплуатации не нарушены.
Go to the top of the page
 
+Quote Post
max_mart
сообщение Oct 8 2012, 17:24
Сообщение #22


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



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

В принципе контролировать WDRF будит достаточно)))
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 8 2012, 17:27
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(max_mart @ Oct 8 2012, 20:24) *
Кстати, а флаг WDRF регистра MCUSR, сохраняет свое значение 1, после сброса, что сброс был?

Естественно сохраняет.
Причём его надо обязательно сбрасывать, иначе не удасться установиь период WDT, отличный от минимального.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Oct 8 2012, 17:30
Сообщение #24


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(prottoss @ Oct 8 2012, 18:26) *
Сброс по WDT работает так же как и сброс от внешнего RESET.
За исключением того, что при этом взводится флаг WDRF в MCUSR, который держит в 1-ке бит WDE в WDTCSR (обратите внимание на X вместо 0 в «состоянии после сброса» для WDE).

Т.е. после сброса по WDT этот самый WDT оказывается гарантированно разрешённым, а после сброса по RESET — ну, зависит от фьюза WDTON :-)

Т.е. мало просто использовать вызов вызов рекомендованных Reset()/mcu_reset(), надо добавить при старте очистку источников сброса в MCUSR и запрет WDT.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
max_mart
сообщение Oct 8 2012, 17:43
Сообщение #25


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



ну значит сделаю тогда, так
if (!(MCUSR&0b00001000)) {...}
// проверяю флаг: если сброс вызван вотчдог, то ничего не делать, если питание на МК только поступило и флаг не установлен, то выполнить действие
MCUSR=0x00;

REAL
Т.е. Вы хотите сказать, что надо добавить еще сюда wdt_disable();?

И еще момент. Порты сбрасываются все как выхода в высокоомное состояние(состояние высокого импенданса)?
Go to the top of the page
 
+Quote Post
ReAl
сообщение Oct 8 2012, 17:50
Сообщение #26


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



MCUSR = 0; сделать всегда, так как оставшийся от сброса по WDT бит (1 << WDRF) не даст ни запретить WDT, ни, как выше было сказано, изменить время (а уж оно-то по сбросу будет поставлено на минимальное).

После чего запретить либо сбросить WDT, в зависимости от того, используется ли он по прямому назначению.

Если WDT использовался только для сброса контроллера, то надо его запретить. Он разрешён после своей сработки и через 16 мс сработает опять.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
max_mart
сообщение Oct 8 2012, 18:01
Сообщение #27


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



только для сброса контроллера. Сначала инициализирую МК,потом отключаю watchdog и сбрасываю флаг WDRF функцией WDT_Off(функцию взял прямо из даташита)
Go to the top of the page
 
+Quote Post
max_mart
сообщение Oct 8 2012, 19:36
Сообщение #28


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



Да и еще момент: Не может быть такого, что дапустим сразу при первом запуске МК(подачи питания) флаг WDRF установится в 1 или же он строго устанавливается только по срабатыванию ресета от вотчдог?
И порты сбрасываются все в состояние, как выхода в высокоомном состоянии(состояние высокого импенданса)?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 8 2012, 20:13
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(max_mart @ Oct 8 2012, 21:01) *
Сначала инициализирую МК,потом отключаю watchdog и сбрасываю флаг WDRF функцией WDT_Off(функцию взял прямо из даташита)

Тоже как-то взял из даташита - но она в 4 такта не уложилась...

Цитата(max_mart @ Oct 8 2012, 22:36) *
Да и еще момент: Не может быть такого, что дапустим сразу при первом запуске МК(подачи питания) флаг WDRF установится в 1 или же он строго устанавливается только по срабатыванию ресета от вотчдог?


Цитата
This bit is set if a Watchdog System Reset occurs. The bit is reset by a Power-on Reset, or by
writing a logic zero to the flag.

То есть если флаг установился (сбросом по wdt), то вернуть его в 0 может только запись 0 или Power-on Reset (но не BOD или Ext Reset).

Цитата(max_mart @ Oct 8 2012, 22:36) *
И порты сбрасываются все в состояние, как выхода в высокоомном состоянии(состояние высокого импенданса)?

Да все в Z-state. Initial Value для DDRx и PORTx = 0.

Go to the top of the page
 
+Quote Post
max_mart
сообщение Oct 9 2012, 04:58
Сообщение #30


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



Артем,
Как тогда посоветуете правильно его отключить?


static inline void WDT_off(void)
{
wdt_reset();
/* Clear WDRF in MCUSR */
MCUSR &= ~(1<<WDRF);
/* Write logical one to WDCE and WDE */
/* Keep old prescaler setting to prevent unintentional time-out */
WDTCSR = 0b00011000;
/* Turn off WDT */
WDTCSR = 0x00;
}
Так?

И еще момент:
после сброса, я флаги все обнуляю и выключаю вотчдог. Но если мне он опять нужен , то перед включением я должен бит WDRF выставить в 1?

Либо он(WDRF) устанавливается автоматически при записи 1 в WDE?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 9 2012, 14:56
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(max_mart @ Oct 9 2012, 07:58) *
Как тогда посоветуете правильно его отключить?
static inline void WDT_off(void)
{
wdt_reset();
/* Clear WDRF in MCUSR */
MCUSR &= ~(1<<WDRF);
/* Write logical one to WDCE and WDE */
/* Keep old prescaler setting to prevent unintentional time-out */
WDTCSR = 0b00011000;
/* Turn off WDT */
WDTCSR = 0x00;
}
Так?

Я делал примерно также, просто в однажды ИАР сгенерил код который перестал укладываться в 4 цикла.
Переделал так:
Код
void WDT_Prescaler_Change(unsigned char new_wdt_period);
int main() {
    MCUSR = ~(1<<WDRF);
    WDT_Prescaler_Change(6|(1<<WDE));
    __watchdog_reset();


Код
WDT_Prescaler_Change:
; Turn off global interrupt

    push r17
    mov r17, r16
    cli
; Reset Watchdog Timer
    wdr
; Start timed sequence
    lds r16, 0x60
    ori   r16, 0x18
    sts 0x60, r16
; --  Got four cycles to set the new values from here -
; Set new prescaler(time-out) value = 64K cycles (~0.5 s)
    sts 0x60, r17
; --  Finished setting new values, used 2 cycles -
; Turn on global interrupt
    pop r17
    ret




Цитата(max_mart @ Oct 9 2012, 07:58) *
И еще момент:
после сброса, я флаги все обнуляю и выключаю вотчдог. Но если мне он опять нужен , то перед включением я должен бит WDRF выставить в 1?
Либо он(WDRF) устанавливается автоматически при записи 1 в WDE?

Цитата
This bit is set if a Watchdog System Reset occurs.

Вы не можете установить WDRF - он устанавливается аппаратно. Его нужно просто сбросить на старте записью в него единицы и больше о нём не вспоминать.
Go to the top of the page
 
+Quote Post
max_mart
сообщение Oct 9 2012, 16:35
Сообщение #32


Местный
***

Группа: Участник
Сообщений: 248
Регистрация: 30-09-11
Пользователь №: 67 474



Почему 1??? Когда в описании написано 0!

Цитата(max_mart @ Oct 9 2012, 20:30) *
Почему 1??? Когда в описании написано 0!

"Вы не можете установить WDRF - он устанавливается аппаратно." - т.е. мне достаточно только прописать WDE, если мне необходим ресет и вотчдог включится
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 9 2012, 16:49
Сообщение #33


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(max_mart @ Oct 9 2012, 19:35) *
Почему 1??? Когда в описании написано 0!

Я ошибся - писать нужно 0.

Цитата(max_mart @ Oct 9 2012, 19:35) *
т.е. мне достаточно только прописать WDE, если мне необходим ресет и вотчдог включится

да
Go to the top of the page
 
+Quote Post
abi
сообщение Oct 9 2012, 22:08
Сообщение #34


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 10-10-05
Из: Казань
Пользователь №: 9 432



Вариант без WDT
Код
__disable_interrupt();
((void (*)())0x0000)();
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 9 2012, 23:49
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(abi @ Oct 10 2012, 01:08) *
Вариант без WDT
Код
__disable_interrupt();
((void (*)())0x0000)();

Это не то же самое - процессор сброшен не будет и вся периферия останется в несброшенном состоянии.
Go to the top of the page
 
+Quote Post
abi
сообщение Oct 10 2012, 02:40
Сообщение #36


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 10-10-05
Из: Казань
Пользователь №: 9 432



Цитата(_Артём_ @ Oct 10 2012, 03:49) *
Это не то же самое - процессор сброшен не будет и вся периферия останется в несброшенном состоянии.

Согласен, внутреннего системного сброса не произойдет. В зависимости от замысла принудительного программного сброса, системный сброс может и не понадобиться. В любом случае используемая периферия будет проинициализирована программой.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 10 2012, 11:44
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(abi @ Oct 10 2012, 05:40) *
В любом случае используемая периферия будет проинициализирована программой.

Не в любом случае, а только есть этим озаботиться.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Oct 10 2012, 18:36
Сообщение #38


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



А иногда и озабоченность озабачивание даже если этим озаботиться, то все равно разница с аппаратным сбросом будет, и существенная.
Например
Цитата(ATmega88PA doc)
• Bit 3 – TXENn: Transmitter Enable n
Writing this bit to one enables the USART Transmitter. The Transmitter will override normal port operation for the TxDn pin when enabled. The disabling of the Transmitter (writing TXENn to zero) will not become effective until ongoing and pending transmissions are completed, i.e., when the Transmit Shift Register and Transmit Buffer Register do not contain data to be transmitted. When disabled, the Transmitter will no longer override the TxDn port.
Т.е. даже если записать «сбросовое» значение 0x00 в UCSR0B, передатчик ещё будет передавать недопереданное. Куда-то в астрал, так как ножка отключится, но кто его знает, как там себя автоматы поведут, если до конца передачи опять проинициализировать USART либо даже не занулять UCSR0B а просто заново записать то, что нужно.
Как миниум, аккуратненько взведётся (вполне возможно не ожидаемый ещё программой) флаг TXC.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
vgo1
сообщение Oct 11 2012, 16:40
Сообщение #39


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 28-05-12
Пользователь №: 72 050



А нельзя по флагу сделать переход на самое начало программы /адрес 0000/и не задействовать WDT? Надо сбросить флажки всех прерываний и инициализировать указатель стека. Я похожее сделал, работает.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Oct 11 2012, 16:55
Сообщение #40


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(vgo1 @ Oct 11 2012, 22:40) *
А нельзя по флагу сделать переход на самое начало программы /адрес 0000/и не задействовать WDT? Надо сбросить флажки всех прерываний и инициализировать указатель стека. Я похожее сделал, работает.
Тогда глобальные переменные инициализируются, а вот порты в дефолтное состояние не установятся. Стек, кстати, сам инициализируется, если на Си, конечно, пишите.


--------------------
Go to the top of the page
 
+Quote Post

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

 


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


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