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

|
Цитата(Fujitser @ Jul 7 2013, 09:23)  Быдлокод и возможность reuse - это совершенно ортогональные понятия. Можно написать библиотеку с быдлокодом, можно написать статическую конфигурацию правильно и хорошо. Одноразовый стаканчик, конечно, можно помыть и использовать повторно, но обычно так не делают. В то же время чайный сервиз, как правило, никто не выкидывает в помойку, после первого чаепития. С кодом та же история. Возможно, зависимость быдлокод/reuse неочевидна, но она есть и вполне осязаема, т.е. ортогональности минимум.
|
|
|
|
|
Jul 8 2013, 13:31
|
Местный
  
Группа: Свой
Сообщений: 294
Регистрация: 28-02-05
Из: Екатеринбург
Пользователь №: 2 925

|
Цитата(Tahoe @ Jul 8 2013, 04:38)  Возможно, зависимость быдлокод/reuse неочевидна, но она есть и вполне осязаема, т.е. ортогональности минимум. Да, неочевидна. Возможно, вы хотели сказать, что библиотеки прекрасны, как чайные сервизы, а одноразовый код всегда уродлив? Если бы... Возможно, фирменные библиотеки или известные open-source библиотеки сделаны хорошо (гм, не всегда), но что касается библиотек, которые пишутся на предприятиях "для себя", это ужас-ужас. Ситуация на рынке труда сейчас такова, что программированием зачастую занимаются случайные люди, что в совокупности с огромной текучестью приводит к тому, что на код часто нельзя смотреть без слёз.
|
|
|
|
|
Jul 8 2013, 16:48
|
Местный
  
Группа: Свой
Сообщений: 459
Регистрация: 30-03-06
Из: Москва
Пользователь №: 15 600

|
Цитата(Fujitser @ Jul 8 2013, 17:31)  Да, неочевидна. Возможно, вы хотели сказать, что библиотеки прекрасны, как чайные сервизы, а одноразовый код всегда уродлив? Если бы... Нет. Я о том, что назначение предмета тянет за собой выбор материала, из которого он изготовлен. Reuse кода подразумевает некие явные и неявные правила его написания, суть - ограничения буйной фантазии программера, что, в свою очередь, ограничивает "быдлокодерство". В этом и проявляется не ортогональность. Развивая пример выше, сколько ни пытайся сделать из пластика полноценную чашку, все равно будет получаться больше похожее одноразовый стаканчик. До тех пор, пока материал не будет заменен на фарфор или стекло, что потянет за собой технологию и остальное.
|
|
|
|
Сообщений в этой теме
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 Genadi Zawidowski Я решил просто - свой функцией, которая подставляе... Jul 3 2013, 19:04 Tahoe Цитата(Genadi Zawidowski @ Jul 3 2013, 23... Jul 4 2013, 08:26  _Pasha Цитата(Tahoe @ Jul 4 2013, 11:26) Так про... Jul 4 2013, 08:43   Genadi Zawidowski Цитата(_Pasha @ Jul 4 2013, 12:43) Reus... Jul 4 2013, 10:43   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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|