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

 
 
> Скрытый баг, О вреде копипасты
Genadi Zawidowsk...
сообщение Jul 3 2013, 06:24
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Столкнулся я с тем, что проект, ранее работавший на STM32F101, STM32F105 перестал работать на STM32F103 (буквочки не важны).
Вернее, проект работал, но "отваливался" дебаг порт SWD - помогала только загрузка через замыкание BOOT0. Радостно потирая руки, начал писать демонстрацию бага...
Внимательное чтение документации выявило причину.
Пока - код-загадка, который после программирования в STM32F103RC делал его "невидимым" для J-FLASH.

CODE
#include "stm32f10x.h"

#define STACK_SIZE 0x600

static __attribute__ ((aligned(8), section(".noinit"))) uint32_t pdwStack [STACK_SIZE] ;

typedef void IntFunc(void);
typedef IntFunc * IntFuncP;

static IntFunc ResetException;


static
__attribute__((used, section(".vectors"))) IntFuncP exception_table [256] = {

(IntFuncP) (& pdwStack [STACK_SIZE]),
ResetException,
};


static void ResetException(void)
{
/* Используется только SWD */
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
AFIO->MAPR = (AFIO->MAPR & ~ AFIO_MAPR_SWJ_CFG) | AFIO_MAPR_SWJ_CFG_JTAGDISABLE; // PA15, BP3 & PB4 pins free for use.

/* ... много кода */
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
AFIO->MAPR |= AFIO_MAPR_SPI1_REMAP;
/* ... инициализация SPI1 */

/* ... много кода */
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN; /* I/O port B clock enable */
// Set PB3 as output
GPIOB->CRL = GPIO_CRL_CNF3_0;


/* ... много кода */
for (;;)
;
}



ps: вот тут
мучаются с похожей проблемой, но не нашли решения...


Сообщение отредактировал Genadi Zawidowski - Jul 3 2013, 07:01
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Genadi Zawidowsk...
сообщение Jul 3 2013, 19:04
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Я решил просто - свой функцией, которая подставляет нужную мне константу в каждому обращению к ремапу.
Первое обращение с маской "0", для настройки SWD, если ремапа не окажется.
Честно говоря, я удивлён что эти грабли такие истоптанные... Всегда хочется верить в уникальность своих проблем.

Сообщение отредактировал Genadi Zawidowski - Jul 3 2013, 19:05
Go to the top of the page
 
+Quote Post
Tahoe
сообщение Jul 4 2013, 08:26
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600



Цитата(Genadi Zawidowski @ Jul 3 2013, 23:04) *
Я решил просто - свой функцией, которая подставляет нужную мне константу в каждому обращению к ремапу.

ИМХО, лучше всего и правильнее воспользоваться такой фичей кортекса, как bitbang. "И сразу станет от этого хорошо."(с)

Цитата(_Pasha @ Jul 4 2013, 10:48) *
все, что касается статического конфига, зависящего только от конкретной платы - записывать сразу, с минимумом манипуляций регистрами

Так прокатит только в одном случае, если писать быдлокод. А если писать нормально, с возможностью reuse, тогда никаких статических конфигов не получится, даже на самом мелком AVR.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jul 4 2013, 08:43
Сообщение #4


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Tahoe @ Jul 4 2013, 11:26) *
Так прокатит только в одном случае, если писать быдлокод. А если писать нормально, с возможностью reuse, тогда никаких статических конфигов не получится, даже на самом мелком AVR.

a14.gif Reuse периферии... оригинально!
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Jul 4 2013, 10:43
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Цитата(_Pasha @ Jul 4 2013, 12:43) *
a14.gif Reuse периферии... оригинально!


А что, для Вас это новость? Я давно во всех своих проектах использую что-то вроде "bios" с инициализацией (как минимум) разных модулей - причём, платформы arm7-arm9(atmel), cortex-m3 (atmel, stm), atmega... http://subversion.assembla.com/svn/hfreciever/trunk/
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Genadi Zawidowski   Скрытый баг   Jul 3 2013, 06:24
- - SSerge   Цитата(Genadi Zawidowski @ Jul 3 2013, 13...   Jul 3 2013, 07:45
|- - demiurg_spb   Цитата(SSerge @ Jul 3 2013, 11:45) P.S. Х...   Jul 3 2013, 08:18
|- - Tahoe   Цитата(demiurg_spb @ Jul 3 2013, 12:18) В...   Jul 3 2013, 13:21
|- - Tahoe   Цитата(_Pasha @ Jul 4 2013, 12:43) Reus...   Jul 4 2013, 11:05
|- - _Pasha   Цитата(Tahoe @ Jul 4 2013, 14:05) Хотя Па...   Jul 4 2013, 13:37
|- - Tahoe   Цитата(_Pasha @ Jul 4 2013, 17:37) Чушь к...   Jul 4 2013, 14:12
|- - _Pasha   Цитата(Tahoe @ Jul 4 2013, 17:12) Или one...   Jul 7 2013, 06:04
- - Genadi Zawidowski   ЦитатаP.S. Хорошие грабли, я по ним уже ходил Но п...   Jul 3 2013, 20:20
|- - toweroff   Цитата(Genadi Zawidowski @ Jul 4 2013, 00...   Jul 3 2013, 22:17
- - _Pasha   Цитата(demiurg_spb @ Jul 3 2013, 11:18) В...   Jul 4 2013, 06:48
- - Fujitser   Быдлокод и возможность reuse - это совершенно орто...   Jul 7 2013, 05:23
- - Tahoe   Цитата(Fujitser @ Jul 7 2013, 09:23) Быдл...   Jul 7 2013, 22:38
- - Fujitser   Цитата(Tahoe @ Jul 8 2013, 04:38) Возможн...   Jul 8 2013, 13:31
- - Tahoe   Цитата(Fujitser @ Jul 8 2013, 17:31) Да, ...   Jul 8 2013, 16:48


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 15:10
Рейтинг@Mail.ru


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