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

 
 
> обращение по нулевому адресу..., ексепшен не генерится
klen
сообщение Mar 14 2012, 10:34
Сообщение #1


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



вот код
Код
typedef struct
{
    int z;
    int d;
} EE;
EE* sw;
volatile int z;
//-----------------------------------------------------------
int main(void)
{
    sw->d = 12;
    z = sw->d;
}


делается на stm32f417zgt
эксешнен не генерится, такое ощущение что просто команды игнорируются.
чего я не правильно понимаю?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
scifi
сообщение Mar 14 2012, 10:50
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(klen @ Mar 14 2012, 14:34) *
эксешнен не генерится, такое ощущение что просто команды игнорируются.

А где написано, что должен быть эксепшн? По мне так наоборот: запись в область флэш используется в процессе IAP.
Go to the top of the page
 
+Quote Post
klen
сообщение Mar 14 2012, 13:57
Сообщение #3


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(scifi @ Mar 14 2012, 14:50) *
А где написано, что должен быть эксепшн? По мне так наоборот: запись в область флэш используется в процессе IAP.

1. адрес нулевой, потому что переменная неинициализирована, значит отправляется линкером в секциюю bss, кусок памяти для секции bss в crt коде забиваются нулями - это поведение определенноне ANSI C стандартом.
2. запись в область флеша здесь не выполняется, во первых флеш начинается со смешением 0x800000, во вторых в нее нелзя писать иначе это называлосьбы озу , можно только попросит флеш контроллер это сделать, это и назывется IAP.

Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 14 2012, 15:28
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(klen @ Mar 14 2012, 19:57) *
1. адрес нулевой, потому что переменная неинициализирована, значит отправляется линкером в секциюю bss, кусок памяти для секции bss в crt коде забиваются нулями - это поведение определенноне ANSI C стандартом.

Даже если принять это, где у вас запись в нулевой адрес? Скорее в адрес == 4.
Go to the top of the page
 
+Quote Post
klen
сообщение Mar 15 2012, 07:30
Сообщение #5


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(jcxz @ Mar 14 2012, 19:28) *
Даже если принять это, где у вас запись в нулевой адрес? Скорее в адрес == 4.

это уже буквоедство. конечно 0 + sizeof(uint32_t) = 4, это сути не меняет.
я чето не понимаю, видимо того что понимают все...
адреса 0x00000000...... согласно выставленым пинам BOOT является алиасоми лоя адресов 0x08000000 - тоесть
адреса ячеек флеш накопитяля. если делаю STR r0 , [r1] , где r1 содержит в указанном выше диапазоне то это соответствует попытке записать слово в ячейку по указанному адресу, декодер адреса контроллера шины должен на это отреагировать как недопустимый адрес для операции записи - ведь туда ничего записать принципиально нельзя.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Mar 15 2012, 14:47
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(klen @ Mar 15 2012, 13:30) *
адреса 0x00000000...... согласно выставленым пинам BOOT является алиасоми лоя адресов 0x08000000 - тоесть
адреса ячеек флеш накопитяля. если делаю STR r0 , [r1] , где r1 содержит в указанном выше диапазоне то это соответствует попытке записать слово в ячейку по указанному адресу, декодер адреса контроллера шины должен на это отреагировать как недопустимый адрес для операции записи - ведь туда ничего записать принципиально нельзя.

Насколько я понимаю у вас Cortex-M4? С ним дела не имел, но например в M3, многие исключения могут разрешаться/запрещаться через System control block. Возможно у вас генерация данного исключения просто выключена.
Может в M4 есть что-то типа memory manager-a и его можно использовать для этого?
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 08:47
Рейтинг@Mail.ru


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