|
Работа с опреативной памятью в AVR ASM |
|
|
|
Jan 18 2011, 09:56
|

Участник

Группа: Участник
Сообщений: 17
Регистрация: 27-09-10
Из: Харьков
Пользователь №: 59 762

|
Здравствуйте, так получилось, что на C/С++ для АВРов начал писать раньше, чем на АСМе. Теперь не совсем понятно как корректно работать с переменными в SRAM. Если на С задачу копирования адреса я решал так: Код unsigned char *ptr1, *ptr2;
ptr2 = ptr1; и копирование значения (как вариант): Код unsigned char *ptr1, *ptr2;
*ptr2 = *ptr1; то как такие задачи решаются на АСМе? если написан следующий код: Код Tmp1: .byte 1 Tmp2: .byte 1
.....
lds r16,SPDR ;для примера взят регистр SPI st Z+,r16
lds Tmp1,ZH lds Tmp2,ZL то что значат последние две строки кода: что я копирую значения старшего и младшего байтов регистра Z или что я копирую новый адрес ячейки памяти, на которую указывает Z после постинкремента? Вобщем хотелось бы знать как в АСМе скопировать адрес и как скопировать значение. Надеюсь корректно описал вопрос.
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 42)
|
Jan 18 2011, 10:38
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Код lds Tmp1,ZH lds Tmp2,ZL Вы считывете в Tmp1- значение расположенное по адресу находящегося ZH и соответсвенно в Tmp2 в ZL т.е не понятно откуда Скопировать значение mov TMP1,TMP2Скопировать адрес MOVW X,Z
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jan 18 2011, 11:52
|

Участник

Группа: Участник
Сообщений: 17
Регистрация: 27-09-10
Из: Харьков
Пользователь №: 59 762

|
Цитата(ILYAUL @ Jan 18 2011, 12:38)  Вы считывете в Tmp1- значение расположенное по адресу находящегося ZH и соответсвенно в Tmp2 в ZL т.е не понятно откуда предполагается, что ранее в программе в Z что-то заносилось Цитата(ILYAUL @ Jan 18 2011, 12:38)  Скопировать значение mov TMP1,TMP2 Скопировать адрес MOVW X,Z спасибо, буду пробовать Вообще, наверно, проще будет описать задачу: есть буффер из 50 элементов и в него заносятся последовательно байты; есть две байтовых переменных, в которых должна хранится high и low часть адреса следующего элемента, который будет записан (по аналогии с индексом массива в С/С++). В обработчике прерывания я заношу в буффер байт, инкрементирую регистр Z и нужно этот новый адрес записать для того, чтобы в следующем прерывании уже записывать новый элемент реализация на С для IAR простенького кольцевого буффера: Код #include <ioavr.h> #define EVER;; #define BUFF_SIZE 50
typedef unsigned char BYTE;
BYTE Buff[BUFF_SIZE]; BYTE index;
void main() { USART_Init(); //к примеру будем забирать из УСАРТа байты
for(EVER) { }
#pragma vector=USART0_RXC_vect __interrupt void usart_rxc(void) { BYTE sym;
sym = UDR0; Buff[index++] = sym; index = index % BUFF_SIZE; } } как написать подобное на АСМе? пробовал написать следующее: Код ...
.DSEG USART_Index_H: .byte 1 USART_Index_L: .byte 1 USART_BUFF: .byte 50
... ;инициализации и все такое ...
USART0_RXC: push ZH push ZL push r16
;грузим адрес нового элемента, полученный в предыдущем прерывании lds ZH,USART_Index_H lds ZL,USART_Index_L lds r16,UDR0 st Z+,r16
;сохраняем новый адрес lds USART_Index_H,ZH lds USART_Index_L,ZL reti но, полагаю, это работать не будет... Забыл дописать Код ... ;инициализация lds ZH,high(USART_BUFF) lds ZL,low(USART_BUFF) sts USART_Index_H,ZH sts USART_Index_L,ZL ... ;и забыл в конце прерывания дописать pop r16 pop ZL pop ZH
Сообщение отредактировал HoboTech - Jan 18 2011, 11:53
|
|
|
|
|
Jan 18 2011, 13:17
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Что бы понять до конца задачу - прерывания идут последовательно ? Т.е. 1, 2, 1, 2,1, 2 или нет 1111, 2, 11 ,2 и тд
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jan 18 2011, 13:51
|

Участник

Группа: Участник
Сообщений: 17
Регистрация: 27-09-10
Из: Харьков
Пользователь №: 59 762

|
Цитата(ILYAUL @ Jan 18 2011, 15:17)  Что бы понять до конца задачу - прерывания идут последовательно ? Т.е. 1, 2, 1, 2,1, 2 или нет 1111, 2, 11 ,2 и тд в общем задача сводится к тому, чтобы по приходу символа в USART заносить его последовательно в буфер прерывание одно - USART0_RXC:
|
|
|
|
|
Jan 18 2011, 15:02
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Код .def R16,temp .def R17,count .def R4,SaveSREG ... Инициализация
.DSEG USART_BUFF: .byte 50
SAVE_INDEX_Z: byte 2 SaveZL =0 SaveZH=1
MAIN: ldi ZH,HIGH(USART_BUFF) ldi ZL,LOW(USART_BUFF) ldi count,50 .........................
USART0_RXC: in SaveSREG,SREG push SaveSREG push temp push ZL push ZH lds ZL,SAVE_INDEX_Z+SaveZL lds ZH,SAVE_INDEX_Z+SaveZH lds temp,UDR0 st Z+,temp dec count brne END_RX ldi ZH,HIGH(USART_BUFF) ldi ZL,LOW(USART_BUFF) ldi count,50 END_RX: sts SAVE_INDEX_Z+SaveZL,ZL sts SAVE_INDEX_Z+SaveZH,ZH pop ZH pop ZL pop temp pop SaveSREG out SREG,SAVESREG reti Но лучше использовать регисты X или Y вместо Z- через Z идёт обращение к памяти програм и Eeprom и он чаще используется и соответственно его надо отслеживать и при необходимости PUSH и POP
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jan 18 2011, 16:31
|
Участник

Группа: Участник
Сообщений: 20
Регистрация: 6-12-07
Из: Рига, Латвия
Пользователь №: 33 036

|
Цитата(HoboTech @ Jan 18 2011, 17:39)  Я так понял Ваш код будет работать только в случае, когда в основном теле программы не изменяется содержимое ZH и ZL. Меня интересует именно сохранение адреса, на который указывает регистровая пара Z после постинкремента, в переменную Если, конечно, такое возможно Есть два варианта: - сохраняем в ОЗУ; .equ ZH_save 0x0100 .equ ZL_save 0x0101 sts ZH_save,ZH sts ZL_ save,ZL - копируем регистровую пару; movw r3:r2,ZH:ZL в целом: lds ZH, ZH_save ; восстанавливаем указатель lds ZL, ZL_save in r16, UDR ; записываем принятый байт st Z+, r16 sts ZH_save, ZH ; сохраняем указатель sts ZL_save, ZL
Сообщение отредактировал Дмитрий Ветра - Jan 18 2011, 16:34
|
|
|
|
|
Jan 18 2011, 17:04
|

Участник

Группа: Участник
Сообщений: 17
Регистрация: 27-09-10
Из: Харьков
Пользователь №: 59 762

|
Цитата(Дмитрий Ветра @ Jan 18 2011, 18:31)  Есть два варианта:
- сохраняем в ОЗУ; .equ ZH_save 0x0100 .equ ZL_save 0x0101
sts ZH_save,ZH sts ZL_ save,ZL - копируем регистровую пару;
movw r3:r2,ZH:ZL
в целом:
lds ZH, ZH_save ; восстанавливаем указатель lds ZL, ZL_save
in r16, UDR ; записываем принятый байт st Z+, r16
sts ZH_save, ZH ; сохраняем указатель sts ZL_save, ZL Спасибо, а то я разбаловался языками верхнего уровня, а на уровне "кирпичиков" топчусь как лось на одном месте
|
|
|
|
|
Jan 18 2011, 17:26
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(HoboTech @ Jan 18 2011, 18:39)  Я так понял Ваш код будет работать только в случае, когда в основном теле программы не изменяется содержимое ZH и ZL. Меня интересует именно сохранение адреса, на который указывает регистровая пара Z после постинкремента, в переменную Если, конечно, такое возможно всё верно . Если Вы предполагаете изменять ZL ZH , то хотя бы напишите , что именно будет происходить в основной программе . Тогда будет понятно , каким образом сохранять Z . Толи записывать его в регистры хранения , толи в SRAM, а может будет достаточно push и pop Я Вам переписал предыдущий пост- сохранив Вам Z для прерывания и для MAIN
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jan 21 2011, 11:19
|

Участник

Группа: Участник
Сообщений: 17
Регистрация: 27-09-10
Из: Харьков
Пользователь №: 59 762

|
И все таки туго что-то до меня доходит работа с адресами... что означает следующий код: Код .DSEG tmp: .byte 1
...
lds ZL,tmp что я заношу в регистр ZL значение байта, который находился в памяти по адресу tmp или что я записываю значение младшего байта самого адреса?
|
|
|
|
|
Jan 22 2011, 06:06
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(HoboTech @ Jan 21 2011, 15:19)  И все таки туго что-то до меня доходит работа с адресами... что означает следующий код: Код .DSEG tmp: .byte 1
...
lds ZL,tmp что я заношу в регистр ZL значение байта, который находился в памяти по адресу tmp или что я записываю значение младшего байта самого адреса?  В регистр ZL загружается содержимое ячейки памяти с адресом tmp. Если вы хотите загрузить в ZL адрес ячейки, используйте команду LDI. Все ваши проблемы возникают от того, что вы путаете различные методы адресации. В ассемблере AVR различные методы адресации определяются с помощью различных мнемоник. Код ldi r16, 5 ; Непосредственная (immediate) адресация - загрузка числа 5 lds r16, 5 ; Прямая (direct) адресация - загрузка в регистр r16 содержимого ячейки по адресу 5 ld r16, Z ; Косвенная (indirect) адресация - загрузка в регистр r16 через указатель Z ld r16, Z+ ; Автоинкрементная (post increment) адресация через указатель Z ld r16, Z- ; Автодекрементная (pre decrement) адресация через указатель Z ldd r16, z+5 ; Косвенная со смещением (inditect with displscement) адресация через указатель Z ; адрес ячейки памяти определяется как сумма содержимого указателя Z и числа 5 Надеюсь, что немного прояснил ситуацию. Или нет?
Сообщение отредактировал _Bill - Jan 22 2011, 06:07
|
|
|
|
|
Jan 24 2011, 08:42
|

Участник

Группа: Участник
Сообщений: 17
Регистрация: 27-09-10
Из: Харьков
Пользователь №: 59 762

|
Про lds и ldi я понял, спасибо. Не понял что именно загружается (значение или адрес) в этих строках: Цитата(_Bill @ Jan 22 2011, 08:06)  ld r16, Z ; Косвенная (indirect) адресация - загрузка в регистр r16 через указатель Z ld r16, Z+ ; Автоинкрементная (post increment) адресация через указатель Z ld r16, Z- ; Автодекрементная (pre decrement) адресация через указатель Z ldd r16, z+5 ; Косвенная со смещением (inditect with displscement) адресация через указатель Z ; адрес ячейки памяти определяется как сумма содержимого указателя Z и числа 5[/code] P.S. Мануалы честно читал, но когда дошло до практической реализации - запнулся.
Сообщение отредактировал HoboTech - Jan 24 2011, 08:44
|
|
|
|
|
Jan 24 2011, 09:57
|

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

|
Цитата(HoboTech @ Jan 24 2011, 11:42)  Не понял что именно загружается (значение или адрес) в этих строках: Для AVR в строках где нет никаких цифирей происходит косвенное обращение к данным (чтение или запись). Адрес сидит внутри регистровой пары и его в коде операции не видно - поэтому такой тип адресации и называется косвенным (через индексные регистры X,Y,Z). Смею предположить, что без такого способа адресации программирования, как мы его сегодня знаем, не существовало. Так что изучите это очень внимательно! Основа основ как-никак:-)
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Jan 24 2011, 12:35
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(HoboTech @ Jan 24 2011, 12:42)  Про lds и ldi я понял, спасибо. Не понял что именно загружается (значение или адрес) в этих строках:
P.S. Мануалы честно читал, но когда дошло до практической реализации - запнулся. Методы адресации - это один из трех китов, на которых держится архитектура любого процессора (AVR в том числе). Так что стоит затратить время, чтобы разобраться с адресацией. В дальнейшем эти знания скорее всего вам понадобятся. Что касается семейства AVR, то советую внимательнее почитать сей документ Система команд AVR
|
|
|
|
|
Jan 26 2011, 00:54
|
Местный
  
Группа: Участник
Сообщений: 235
Регистрация: 20-11-10
Пользователь №: 61 032

|
Не считая полезным занятием переписывание собственными словами документа "AVR Instruction Set", обратил бы внимание на: Код ldi XH, high(addr) ldi XL, low(addr) cli ; !!! ld R16, X+ ld R17, X sei ; !!! В том смысле, что если после ld R16, X+ произойдёт прерывание - после возврата из него XH и (или?) XL испортятся. Даже если попытано их сохранять/восстановлять в процедуре обработки прерывания. Где-то умнее излагается о, но ссылку либо название затрудняюсь.
|
|
|
|
|
Jan 26 2011, 04:02
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(нечитатель @ Jan 26 2011, 04:54)  Не считая полезным занятием переписывание собственными словами документа "AVR Instruction Set", обратил бы внимание на: Код ldi XH, high(addr) ldi XL, low(addr) cli ; !!! ld R16, X+ ld R17, X sei ; !!! В том смысле, что если после ld R16, X+ произойдёт прерывание - после возврата из него XH и (или?) XL испортятся. Даже если попытано их сохранять/восстановлять в процедуре обработки прерывания. Где-то умнее излагается о, но ссылку либо название затрудняюсь. Это как?!
|
|
|
|
|
Jan 26 2011, 05:04
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 19-11-08
Пользователь №: 41 782

|
Цитата(нечитатель @ Jan 26 2011, 03:54)  В том смысле, что если после ld R16, X+ произойдёт прерывание - после возврата из него XH и (или?) XL испортятся. Даже если попытано их сохранять/восстановлять в процедуре обработки прерывания.
Где-то умнее излагается о, но ссылку либо название затрудняюсь.  ну во-первых , после ld R16, X+ прерывание не может произойти , а во-вторых-что за диверсант будет портить регистр X ? upd.Аааааа - V_G понял откуда ноги растут...  Цитата... Доступ к 16-разрядным регистрам Регистры TCNTn, OCRnA/B/C и ICRn являются 16-разрядными, поэтому, доступ к ним через 8-разр. шину данных AVR ЦПУ может быть осуществлен с помощью двух инструкций чтения или записи. У каждого 16-разр. таймера имеется свой 8-разр. регистр для временного хранения старшего байта данных. Поэтому, во время доступа к 16-разр. регистрам одного таймера используется один и тот же временный регистр... ...Не все 16-разрядные регистры используют временный регистр для копирования старшего байта. Чтение 16-разр. регистров OCRnA/B/C не связано с использованием временного регистра... ...При этом следует обратить внимание на проблему, которая связана с необходимостью выполнения двух инструкций для получения доступа к 16-разр. регистру. Если после выполнения первой инструкции доступа 16-разр. регистра происходит прерывание и в процедуре обработки прерывания также происходит обновление этого же или другого регистра, но относящегося к тому же таймеру, то по завершении обработки прерывания изменяется содержимое временного регистра и выполнение второй инструкции приведет к некорректному результату. Таким образом, когда и в основной программе и в прерываниях происходит обновление временного регистра, то в основной программе перед инициацией доступа к 16-разр. регистру необходимо запретить прерывания... Конец Цитаты.
Сообщение отредактировал OlegNZH - Jan 26 2011, 05:44
|
|
|
|
|
Jan 26 2011, 05:46
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(OlegNZH @ Jan 26 2011, 09:04)   ну во-первых , после ld R16, X+ прерывание не может произойти , а во-вторых-что за диверсант будет портить регистр X ? upd.Аааааа - я понял откуда ноги растут... Ну, во-первых, прерывание может произойти когда угодно, но переход к прерыванию начинается только после выполнения текущей инструкции. Что касается доступа к 16-разрядным портам ВВ, то это совсем другая история.
Сообщение отредактировал _Bill - Jan 26 2011, 05:47
|
|
|
|
|
Jan 26 2011, 06:02
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 19-11-08
Пользователь №: 41 782

|
Цитата(_Bill @ Jan 26 2011, 08:46)  Ну, во-первых, прерывание может произойти когда угодно, но переход к прерыванию начинается только после выполнения текущей инструкции. Что касается доступа к 16-разрядным портам ВВ, то это совсем другая история. Вообще-то я- про конкретную конструкцию говорил cli ; !!! ld R16, X+ А регистры XYZ к прерываниям никаким боком...Здесь речь может идти только о регистрах ВВ.
|
|
|
|
|
Jan 26 2011, 06:12
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(OlegNZH @ Jan 26 2011, 10:02)  Вообще-то я- про конкретную конструкцию говорил cli ; !!! ld R16, X+ На целостность выполнения инструкции ld R16, X+ запрет или разрешение прерываний никоим образом не повлияют. С таким же успехом можно использовать и такую конструкцию Код sei ; !!! ld R16, X+
Сообщение отредактировал _Bill - Jan 26 2011, 06:14
|
|
|
|
|
Jan 26 2011, 06:57
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(_Pasha @ Jan 26 2011, 10:53)  Это было 100 лет назад. До крызыса  Сейчас уже такой баги нетути. Я что-то вообще о такой баге не слышал, да и встречать не приходилось. Или я не там ходил?
|
|
|
|
|
Jan 26 2011, 07:13
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 19-11-08
Пользователь №: 41 782

|
Bill Да причём тут целостность инструкции! Уже второй пост.Кому вы что об'ясняете? Речь шла о том, что после постинкремента - уход по прерыванию , и сколько X не пушируй , он всё равно "сломается". И было указано , что с мерами предосторожностями нужно работать только с 16-ти битными регистрами ВВ , а не с XYZ. Цитата(нечитатель @ Jan 26 2011, 03:54)  Не считая полезным занятием переписывание собственными словами документа "AVR Instruction Set", обратил бы внимание на: Код ldi XH, high(addr) ldi XL, low(addr) cli ; !!! ld R16, X+ ld R17, X sei ; !!! В том смысле, что если после ld R16, X+ произойдёт прерывание - после возврата из него XH и (или?) XL испортятся. Даже если попытано их сохранять/восстановлять в процедуре обработки прерывания. Где-то умнее излагается о, но ссылку либо название затрудняюсь.
Сообщение отредактировал OlegNZH - Jan 26 2011, 07:18
|
|
|
|
|
Jan 26 2011, 07:15
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(OlegNZH @ Jan 26 2011, 11:13)  Bill Да причём тут целостность инструкции! Уже второй пост.Кому вы что об'ясняете? Речь шла о том, что после постинкремента - уход по прерыванию , и сколько X не пушируй , он всё равно "сломается". Что значит "сломается"?
|
|
|
|
|
Jan 26 2011, 07:44
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 19-11-08
Пользователь №: 41 782

|
Цитата(_Bill @ Jan 26 2011, 10:15)  Что значит "сломается"? Вот и я про то-же.(Вы шуток не понимаете  ) . В оригинале: "...В том смысле, что если после ld R16, X+ произойдёт прерывание - после возврата из него XH и (или?) XL испортятся..."
|
|
|
|
|
Jan 26 2011, 07:49
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(OlegNZH @ Jan 26 2011, 10:13)  Bill Речь шла о том, что после постинкремента - уход по прерыванию Насколько понятно из Ваших слов это после этого Код ld R16, X+ Тогда не прокатывает вторая часть фразы- Цитата уход по прерыванию Никуда он там не уйдёт , пока не выполнит Код ld R17, X sei И как же надо написать обработчик прерывания , что бы убить не только регистры XL и XH , но и найти в стеке ячейки с их даными и там их
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jan 26 2011, 08:31
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 19-11-08
Пользователь №: 41 782

|
О,господи..... Вы мой пост #27 прочитайте. (и #26 V_G)
Сообщение отредактировал OlegNZH - Jan 26 2011, 08:33
|
|
|
|
|
Jan 26 2011, 09:51
|
Местный
  
Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219

|
Цитата(OlegNZH @ Jan 26 2011, 12:31)  О,господи..... Вы мой пост #27 прочитайте. (и #26 V_G) Прошу прощения. Сразу не понял. Случай из жизни (немного не в тему). Как-то, еще во время учебы в институте, стоим на перемене, разговариваем, анекдоты травим. Рассказали анекдот, все посмеялись, звонок, все вернулись в аудиторию. Идет занятие. Вдруг по середине занятия раздается громкое "Гы-гы-гы!". Мы все дружно оглядываемся и удивленно-вопросительно смотрим на гогочущего. Тот удовлетворенно - "Дошло!". После этого заржали все остальные. Естественно, преподаватель так ничего и не понял.
|
|
|
|
|
Jan 26 2011, 13:01
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(OlegNZH @ Jan 26 2011, 11:31)  О,господи..... Вы мой пост #27 прочитайте. (и #26 V_G) Прочёл: Цитата ну во-первых , после ld R16, X+ прерывание не может произойти На что Вам правда уже ответитли - можетК тому же эта фраза отличается от Цитата Речь шла о том, что после постинкремента - уход по прерыванию на которую Вам я и ответил
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jan 26 2011, 19:52
|
Местный
  
Группа: Участник
Сообщений: 235
Регистрация: 20-11-10
Пользователь №: 61 032

|
Цитата(_Pasha @ Jan 26 2011, 09:53)  Это было 100 лет назад. До крызыса :) Сейчас уже такой баги нетути. С этого места заинтересовало. Бага была в чём конкретно и в какой момент перестала быть? Популярное развлечение в плане для себя лично: забыть cli + sei вокруг её, танцевать с бубном на ровном месте. Если не забыть - тогда и не танцевать, но после крызиса это как-то иначе теперь решать прилично мало ли вдруг. Теоретические рассуждения читать интересно (особенно писать, наверное), а литературным языком описание так и не вспомнил я где. --- К выступающим есть предложение не стараться делать так. Оно даже и в правилах отдельной строкой прописано.
|
|
|
|
|
Jan 27 2011, 04:32
|
;
     
Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509

|
Цитата(нечитатель @ Jan 26 2011, 23:52)  С этого места заинтересовало. Бага была в чём конкретно и в какой момент перестала быть? Первые эрраты на АТ90S2313 что-то подобное содержали, но это было так давно, что не помню, касалось ли это LD/ST , но LDS/STS - однозначно, типо такая конструкция Код sbrc r0,0 lds r1, ADDR с разрешенными прерываниями, является багонеустойчивой
|
|
|
|
|
Jan 27 2011, 09:19
|
Участник

Группа: Участник
Сообщений: 46
Регистрация: 19-11-08
Пользователь №: 41 782

|
Цитата(_Pasha @ Jan 27 2011, 07:32)  Первые эрраты на АТ90S2313 что-то подобное содержали, но это было так давно, что не помню, касалось ли это LD/ST , но LDS/STS - однозначно, типо такая конструкция Код sbrc r0,0 lds r1, ADDR с разрешенными прерываниями, является багонеустойчивой
Эскизы прикрепленных изображений
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|