Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 30.11.2014
Сообщений: 60

Переполнение стека

08.12.2016, 17:10. Показов 1847. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Данная программа выполняет конфигурирование АЦП для работы в DMA режиме со временем преобразования 10 мкс, оцифровка сигналов поступающих на 1,2,3,4,6,8 каналы мультиплексора и запись этих данных в количестве 10 выборок на канал во внешнюю память данных + добавлена обработка прерывания.(ADuC812 интеловский МК) проверка работоспособности осуществляется в симуляторе. Проблема в том что при загрузке данных происходит переполнение стека и выдаётся соответствующее предупреждение и работа программы останавливается. Подскажите из за чего это происходит и как можно исправить данный дефект ???? Буду признателен за помощь

Текст самой программы (в Word)

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
$MOD812
CSEG
ORG 0000h
AJMP BEGIN
 ORG 0033h
CLR CCONV
START:  MOV R1,#3Ch;    Запись в регистр R1 количества операций (60d).
    ACALL INIT; Вызов подпрограммы настройки UART.
    MOV DPTR,#000000h;  Начальный адрес во внешней памяти.
M2: MOVX A,@DPTR;   Загрузка данных из внешней памяти в аккумулятор.
    ANL A,#0Fh; Маскирование данных с числом 00001111d.
    ACALL WRITE;    Вызов подпрограммы записи в порт.
    INC DPTR;   Инкремент указателя адреса.
    MOVX A,@DPTR;   Загрузка данных из внешней памяти в аккумулятор.
    ACALL WRITE;    Вызов подпрограммы записи в порт.
    INC DPTR;   Инкремент указателя адреса.
    DJNZ R1, M2;    Декремент R1 и переход на M2, если не равно 0.
    RETI    ;Возврат из подпрограммы обработки прерывания
INIT:   CLR TR1;    Запрет счета Т/С1.
    MOV PCON,#80h   ;Настройка UART на максимальную скорость.
    MOV TH1, #0FFh  ;
    MOV SCON,#042h; Установка 1 режима синхронного обмена и запрет приема.
    MOV TMOD,#020h; Настройка таймера счетчика 1 в режим 2.
    SETB TR1;   Запуск UART.
    RET;    Возврат из подпрограммы.
WRITE:  JNB TI,$;   Ожидание завершение передачи данных в порт.
    CLR T1; Сброс флага прерывания передачи.
    MOV SBUF,A; Передача данных в порт.
    RET;    Возврат из подпрограммы.
    ORG 0100h;  Начальный адрес основной программы.
BEGIN:  MOV R0,#0Ah;    Запись в регистр R0 количества выборок (10d).
    MOV DPTR, #000000h; Начальный адрес во внешней памяти.
M3: MOV A,#10h; Разметка памяти для adc1.
    CALL M1;    Вызов подпрограммы разметки памяти.
    MOV A,#20h; Разметка памяти для adc2.
    CALL M1 ;Вызов подпрограммы разметки памяти.
    MOV A,#30h; Разметка памяти для adc3.
    CALL M1;    Вызов подпрограммы разметки памяти.
    MOV A,#40h; Разметка памяти для adc4.
    CALL M1 ;Вызов подпрограммы разметки памяти.
    MOV A,#60h; Разметка памяти для adc6.
    CALL M1 ;Вызов подпрограммы разметки памяти.
    MOV A,#80h; Разметка памяти для канала температурного сенсора.
    CALL M1;Вызов подпрограммы разметки памяти.
    DJNZ R0,M3; Переход к следующей выборке.
    MOV A,#0F0h;    Разметка памяти под команду "стоп".
    MOVX @DPTR,A;   
    MOV ADCCON1,#40h;   Настройка АЦП в нормальный режим, делитель частоты - 1, число тактов задержки - 1, запрет внешнего запуска и запуска от Таймера 2.
    SETB DMA;   Выбор режима DMA.
    SETB CCONV; Установка в режим непрерывного циклического преобразования.
    SETB EA ;Общее разрешение прерываний.
    SETB EADC;  Разрешение прерывания от АЦП.
CYCLE:  SETB P1.0;  Бесконечный цикл.
    CLR P1.0;   
    AJMP CYCLE; 
M1: MOVX @DPTR,A;   Разметка ячейки памяти.
    INC DPTR;   Инкремент указателя адреса.
    INC DPTR;   Инкремент указателя адреса.
    RET;    Возврат из подпрограммы.
    END;    Конец.
Вложения
Тип файла: docx Документ Microsoft Office Word.docx (11.8 Кб, 3 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.12.2016, 17:10
Ответы с готовыми решениями:

Программа на С,переполнение стека
Имеется программа: main() { //сдесь обьявляются много переменных int a1; int a2; int a2; //.... tlc_test(); }

Переполнение таймера
Таймер 0 работает в режиме 16-разрядного таймера. Флаг переполнения таймера устанавливается, когда значение регистра таймера 0FFFFh или 0?

Переполнение байта
Привет всем. Такая проблема возникла. Нужно отследить переполнение байта. Через uart пересылается команда на увеличение или уменьшение ШИМ....

2
 Аватар для Ethereal
6773 / 2741 / 385
Регистрация: 17.02.2013
Сообщений: 4,048
09.12.2016, 09:18
Цитата Сообщение от Nikool Посмотреть сообщение
Проблема в том что при загрузке данных происходит переполнение стека и выдаётся соответствующее предупреждение и работа программы останавливается.
А откуда эмулятор может знать где кончается и начинается стек у микроконтроллера семейства MCS-51 ? Это ведь может знать только программист. Где он решил там стек и начинается. Где он решил там он и кончается. А эмулятор телепатией владеть не может. Так-что это какой-то заскок твоего эмулятора детектировать переполнение стека.

При старте микроконтроллера SP=7. Так что в твоем случае стек это 8... А где у него конец и я не знаю. Ведь тоже телепатией не владею.

Добавлено через 7 минут
P.S. Может в ругани эмулятора есть какая-нибудь подсказка, позволяющая понять что ему не нравится ? Ну например, какое же все таки значение у SP в момент "переполнения стека" ?

Добавлено через 2 минуты
И потом странный подход - эмулятор у тебя, а ошибку спрашиваешь у тех у кого эмулятора нет. Выкидывай из программы кусок за куском поэтапно пока эмулятор на переполнение стека не перестанет ругаться. Последний выкинутый кусок подскажет тебе где локализована причина. Мысль : если есть ошибка, начинается отладка. Ну так отлаживай. Инструмент для отладки ведь как раз у тебя.

Добавлено через 15 часов 24 минуты
З.З.Ы. Просто в самой твоей программе ошибок работы со стеком не видно.
1
0 / 0 / 0
Регистрация: 30.11.2014
Сообщений: 60
10.12.2016, 10:47  [ТС]
Вот что пишет эмулятор
Миниатюры
Переполнение стека  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.12.2016, 10:47
Помогаю со студенческими работами здесь

Переполнение ОЗУ
Здравствуйте! Возникли подозрения, что не хватает оперативной памяти. В документации на ардуино написано, что ОЗУ и стек...

Захват и переполнение TIM2
STM8S003F3P6. IAR Stomdalone license 8K. ST-LINK V2. Измеряю длительность периода с помощью таймера 2. Используется захват и...

Переполнение целочисленной переменной
В процессе работы кода происходит следующее действие: StackBuff = StackBuff/FilterValue; где StackBuff объявлен как uint16_t, а...

Unsigned типы на Atmega8, переполнение разрядов
Вопрос в следующем: как использовать беззнаковый тип для Atmega8? Atmel studio компилирует одинаково что unsigned int что int, в итоге имею...

Переполнение стека
public string XORLP4(string _lpart, string _newextentedbinarytempP4) { int xorlp4 = 0; xorlp4 =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru