|
Скрытый баг, О вреде копипасты |
|
|
|
Jul 3 2013, 06:24
|

Профессионал
    
Группа: Участник
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
Jul 4 2013, 08:26
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600

|
Цитата(Genadi Zawidowski @ Jul 3 2013, 23:04)  Я решил просто - свой функцией, которая подставляет нужную мне константу в каждому обращению к ремапу. ИМХО, лучше всего и правильнее воспользоваться такой фичей кортекса, как bitbang. "И сразу станет от этого хорошо."(с) Цитата(_Pasha @ Jul 4 2013, 10:48)  все, что касается статического конфига, зависящего только от конкретной платы - записывать сразу, с минимумом манипуляций регистрами Так прокатит только в одном случае, если писать быдлокод. А если писать нормально, с возможностью reuse, тогда никаких статических конфигов не получится, даже на самом мелком AVR.
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|