| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| atmega четене на програмната памет в прекъсване http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=18013 |
Страница 1 от 1 |
| Автор: | Реконструктор [ Пет Сеп 17, 2021 5:27 pm ] | |||||||||
| Заглавие: | atmega четене на програмната памет в прекъсване | |||||||||
Нещо изпускам а гугълването не дава резултат. Записал съм един масив в програминия флаш (от него има много, от останалото - не). Излгежда е така:
Когато викна getPowerVal() от прекъсване, в случая примерно ISR(ADC_vect) { cli(); u08 val = getPowerVal(128); sei(); } винаги връща 0 поради няква причина. Същото нещо, викнато в main() си работи както се очаква. Някой има ли идея кво се случва? |
||||||||||
| Автор: | ike [ Пет Сеп 17, 2021 6:07 pm ] |
| Заглавие: | Re: atmega четене на програмната памет в прекъсване |
cli(); - защо забраняваш прекъсванията в прекъсване? u08 val - val глобална променлива от тип volatile u08 ли е? getPowerVal(128) - какво се получава ако присвоиш val = power_map [128] в прекъсването? |
|
| Автор: | slav4o.com [ Пет Сеп 17, 2021 7:59 pm ] |
| Заглавие: | Re: atmega четене на програмната памет в прекъсване |
Така написано няма смисъл от тази функция. Но оредполагам имаш и други сметки които не си показал... Иначе какво се получава ако пробваш функцията да връща хардкодната константа ? |
|
| Автор: | Реконструктор [ Пет Сеп 17, 2021 8:27 pm ] | ||||||||||||||||||
| Заглавие: | Re: atmega четене на програмната памет в прекъсване | ||||||||||||||||||
Оригинала е
като data е резултата от конвертирането. sendDiag просто праща байт по уарт-а да си го гледам. sendDiag(data) си е ок, на терминала си виждам стойността. sendDiag(getPowerVal(data)) виждам 0. PWM_SetDutyCycle(getPowerVal(data)) пина е на нула. PWM_SetDutyCycle(50) си работи както трябва. Това функцията да връща нещо хардкоднато не съм го пробвал, после ще сляза до гаража да го пробвам. |
|||||||||||||||||||
| Автор: | Реконструктор [ Пет Сеп 17, 2021 8:28 pm ] | |||||||||
| Заглавие: | Re: atmega четене на програмната памет в прекъсване | |||||||||
ще го пробвам и това, без да минава през функцията |
||||||||||
| Автор: | slav4o.com [ Пет Сеп 17, 2021 9:44 pm ] |
| Заглавие: | Re: atmega четене на програмната памет в прекъсване |
Не трябва ли да е data = getPowerVal(index) или просто така си го кръстил ? Така ако подаваш data като индекс ако е до 48 имаш само нули. |
|
| Автор: | Реконструктор [ Нед Сеп 19, 2021 11:23 pm ] |
| Заглавие: | Re: atmega четене на програмната памет в прекъсване |
Ако е в RAM-а (т.е. махнеш PROGMEM) няма проблем, работи си. |
|
| Автор: | slav4o.com [ Пон Сеп 20, 2021 1:01 am ] |
| Заглавие: | Re: atmega четене на програмната памет в прекъсване |
Ами данните може би от програмната памет се прехвърлят в RAM като се използва прекъсване, което си забранил и после се обработват по стандартният начин. |
|
| Автор: | s.ivanov [ Пон Сеп 20, 2021 1:20 am ] | |||||||||
| Заглавие: | Re: atmega четене на програмната памет в прекъсване | |||||||||
Четенето от програмната памет е чрез макрос: Steps to define and read data from Flash memory of Atmel AVR devices:
|
||||||||||
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|