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

 
 
> hard fault в keil
dimanisu
сообщение Oct 24 2011, 06:34
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 4-10-07
Пользователь №: 31 055



Здравствуйте!
Не знал в какую ветку форума кинуть сообщение, поэтому кинул и сюда.

Столкнулся со следующей проблемой.
Разрабатываю в keil под stm32. Раньше все проекты писал на си. Сейчас решил опробовать с++.
В проекте много сишных файлов. Включил в проект один .cpp файл. Все работало. Решил немного усложнить используемый класс. Ввел наследование. И программа посыпалась – вылетает в hard_fault прерывание. Причем не там, где вызываются мои объекты с их методами, а гораздо раньше и в совершенно другом месте.
Объекты создаются как обычно, а не через new:
TItem item((const u8*)”текст”);
Причем обнаружил следующую закономерность:
Если уменьшить количество создаваемых объектов, то программа вроде как работает. Но вот если добавить несколько строчек кода в любое другое место, программа опять вылетает в hard_fault.
Пробовал увеличивать размер стека и кучи. Это не помогло.
Раньше с таким не сталкивался
Подскажите пожалуйста, в чем может быть загвоздка?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dimanisu
сообщение Oct 24 2011, 11:11
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 27
Регистрация: 4-10-07
Пользователь №: 31 055



Вылетает при обращении к жки. Он висит на fsmc шине. Раньше все работало нормально.

Код
typedef struct
{
    volatile u16 reg;
    volatile u16 ram;
} Tlcd;


// Note: LCD /CS is CE4 - Bank 4 of NOR/SRAM Bank 1~4
#define LCD_BASE    ((u32)(0x60000000 | 0x0C000000))
#define LCD                ((Tlcd *) LCD_BASE)


#define WRITE_CMD(value)    LCD->reg=value
#define WRITE_DATA8(value)    LCD->ram=value

*************************************************

void init_lcd (void)
{

//разный код

WRITE_CMD(LCD_SOFT_RESET);
WRITE_CMD(LCD_SOFT_RESET); // вылетает здесь
WRITE_CMD(LCD_SOFT_RESET);

}


// вот что творит keil
Код
   199:         WRITE_CMD(SSD1963_SOFT_RESET);
0x08003E88 2001      MOVS     r0,#0x01
0x08003E8A F04F41D8  MOV      r1,#0x6C000000
0x08003E8E 8008      STRH     r0,[r1,#0x00]
   200:         WRITE_CMD(SSD1963_SOFT_RESET);
0x08003E90 8008      STRH     r0,[r1,#0x00]
   201:         WRITE_CMD(SSD1963_SOFT_RESET);
   202:          
0x08003E92 8008      STRH     r0,[r1,#0x00]
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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