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

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> MSP-GCC 4. Кто-нибудь пробовал?, Случайно наткнулся:)
AHTOXA
сообщение Oct 6 2009, 11:27
Сообщение #1


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



http://mspgcc4.sourceforge.net/

Пишут, что
Цитата
GCC 4.x has several advantages over the old 3.2.3 branch. Here are the most important:

  • Better optimization. The generated code is typically 7%-10% smaller than code generated by MSPGCC-3.2.3
  • Better debug info support. The objdump utility displays the mixed assembly/code correctly.
  • Better C++ and inlining support. Unused local variables are automatically filtered out. Inline functions are implemented in a much more compact way.
  • Support for various handy features. For example, gcc 4.3 correctly handles the #pragma once statements.
  • Additionally, the MSPGCC4 port fixes the data-sections bug present in all original MSPGCC versions, allowing using -ffunction-sections and -fdata-sections switches.


Насчёт -ffunction-sections and -fdata-sections врут похоже, у меня и с ними и в текущем msp-gcc нет проблем.

Короче, если кто-то пробовал, поделитесь пожалуйста впечатлениями.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
Ko4egap
сообщение Oct 11 2009, 08:23
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 63
Регистрация: 17-09-09
Пользователь №: 52 434



Отличная новость! Завтра буду пробовать. Надеюсь в нём реализована полноценная поддержка 5й серии

Сообщение отредактировал Ko4egap - Oct 11 2009, 08:36
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Oct 11 2009, 19:02
Сообщение #3


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Ko4egap @ Oct 11 2009, 12:23) *
Отличная новость! Завтра буду пробовать. Надеюсь в нём реализована полноценная поддержка 5й серии

Ваши надежды преждевременны. rolleyes.gif Вся аппаратная часть для 54xx закомментирована.Мне не удалось собрать проект для 5437.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Nov 1 2009, 13:32
Сообщение #4


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Выкачал, стал запускать - пишет, мол, файл исполняемый, но не для этой системы (у меня дома ради изврата XP64 стоит).
Завтра на работе попробую.

Радует хотя бы, что что-то шевелится, а не заглохло, как на исходном mspgcc.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Nov 1 2009, 21:27
Сообщение #5


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(MrYuran @ Nov 1 2009, 18:32) *
Радует хотя бы, что что-то шевелится, а не заглохло, как на исходном mspgcc.

Насколько я понял, там "шевелится" только в одном направлении - адаптация под GCC 4. Никаких изменений в плане поддержки новых чипов не наблюдается.
Но в любом случае, лучше хоть такое движение, чем никакого.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Nov 2 2009, 06:07
Сообщение #6


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(AHTOXA @ Nov 2 2009, 00:27) *
Насколько я понял, там "шевелится" только в одном направлении - адаптация под GCC 4. Никаких изменений в плане поддержки новых чипов не наблюдается.

Мне новые чипы пока неактуальны, а вот некоторые глюки слегка напрягают (например, проблемы с выровненными структурами и юнионами)
Может, в новом GCC это уже пофиксено?
Кстати, а в чём заключается поддержка новых чипов? Неужто там настолько всё по-другому?
Запустил... smile3046.gif
Цитата
D:\Program Files>F:\NEW\msp430-gcc-4.4.2-gdb-7.0-insight-6.8.exe
Программа не умещается в памяти
D:\PROGRA~1>

Ныпонил... 07.gif


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Nov 2 2009, 12:22
Сообщение #7


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(MrYuran @ Nov 2 2009, 09:07) *
Кстати, а в чём заключается поддержка новых чипов? Неужто там настолько всё по-другому?

Описание периферии (специальные регистры). В GCC часто заголовочный файл один на группу периферии, а в 54xx периферия изменена и ее больше. Уже дополнительный файл для GPIO 54xx создан. Существующая система заголовочных файлов, похоже (IMHO), плохо стыкуется с новыми контроллерами в плане совместимости. У IAR и CCE один большой файл на конкретный микроконтроллер.
Цитата
Мне новые чипы пока неактуальны...

Для меня, к сожалению, актуальна только серия 54xx.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Nov 2 2009, 12:39
Сообщение #8


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(mdmitry @ Nov 2 2009, 15:22) *
У IAR и CCE один большой файл на конкретный микроконтроллер.

Ну так и что мешает вместо <io.h> подключить готовый файл от ИАРа?
Другое дело, когда несовместимость на уровне процессорного ядра и надо править бэкэнд компилятора (вроде не перепутал biggrin.gif )


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Nov 2 2009, 16:29
Сообщение #9


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(MrYuran @ Nov 2 2009, 15:39) *
Ну так и что мешает вместо <io.h> подключить готовый файл от ИАРа?
Другое дело, когда несовместимость на уровне процессорного ядра и надо править бэкэнд компилятора

IAR и ССЕ потянет за собой ещё свои файлы (например, in430.h, intrinsics.h) со своими pragma. Разбираться в этом большого желания нет.
Про кодогенерацию не знаю, особенно при объеме кода более 64к.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Nov 6 2009, 10:14
Сообщение #10


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Таки распаковал... Йошкин кот!
265 МЕТРОВ!!!
Чего туда понапихали?!!
Вроде всё то же...

Кстати, для 54хх хедеры лежат без комментиариев, может уже и работают...
CODE
#if !defined(__msp430x54xx)
#define __msp430x54xx

/* msp430x54xx.h
*
* mspgcc project: MSP430 device headers
* MSP430x54xx family header
*
* © 2006 by Steve Underwood <steveu@coppice.org>
* Originally based in part on work by Texas Instruments Inc.
*
* 2008-10-08 - sb-sf (sb-sf@users.sf.net)
* - created, based on msp430xG461x.h
*
* $Id: msp430x54xx.h,v 1.5 2009/06/04 21:55:18 cliechti Exp $
*/

#include <iomacros.h>

#define __MSP430_HAS_T0A5__
#define __MSP430_HAS_T1A3__
#define __MSP430_HAS_UCS__
#define __MSP430_HAS_USCI0_5__
#define __MSP430_HAS_USCI1_5__
#define __MSP430_HAS_USCI2_5__
#define __MSP430_HAS_USCI2_5__
#define __MSP430_SYS_BASE__ 0x180
#define __MSP430_WDT_A_BASE__ 0x150
#define __MSP430_PORT1_BASE__ 0x200
#define __MSP430_PORT2_BASE__ 0x200
#define __MSP430_PORT3_BASE__ 0x220
#define __MSP430_PORT4_BASE__ 0x220
#define __MSP430_PORT5_BASE__ 0x240
#define __MSP430_PORT6_BASE__ 0x240
#define __MSP430_PORT7_BASE__ 0x260
#define __MSP430_PORT8_BASE__ 0x260
#define __MSP430_PORT9_BASE__ 0x280
#define __MSP430_PORT10_BASE__ 0x280
#define __MSP430_PORT11_BASE__ 0x2A0
#define __MSP430_PORTJ_BASE__ 0x320

#define __MSP430_MPY32_BASE__ 0x4C0


#include <msp430/wdt_a.h>
#include <msp430/sys.h>
#include <msp430/gpio_5xxx.h>
#include <msp430/mpy32.h>
#include <msp430/timera.h>
#include <msp430/unified_clock_system.h>
#include <msp430/usci.h>

/*

Empty yet sad.gif

*/
#define GIE 0x0008

#define SFRIE1_ 0x0100 /* Interrupt Enable 1 */
#define SFRIE1_L_ SFRIE1_
#define SFRIE1_H_ SFRIE1_ + 0x01
sfrw(SFRIE1, SFRIE1_);
sfrb(SFRIE1_L, SFRIE1_L_);
sfrb(IE1, SFRIE1_L_);
sfrb(SFRIE1_H, SFRIE1_H_);
sfrb(IE2, SFRIE1_H_);
#define WDTIE (1<<0)
#define OFIE (1<<1)
/* RESERVED (1<<2)*/
#define VMAIE (1<<3)
#define NMIIE (1<<4)
#define ACCVIE (1<<5)
#define JMBINIE (1<<6)
#define JMBOUTIE (1<<7)

#define SFRIFG1_ 0x0102 /* Interrupt Flag 1 */
#define SFRIFG1_L_ SFRIFG1_
#define SFRIFG1_H_ SFRIFG1_ + 0x01
sfrw(SFRIFG1, SFRIFG1_);
sfrb(SFRIFG1_L, SFRIFG1_L_);
sfrb(IFG1, SFRIFG1_L_);
sfrb(SFRIFG1_H, SFRIFG1_H_);
sfrb(IFG2, SFRIFG1_H_);
#define WDTIFG (1<<0)
#define OFIFG (1<<1)
/* RESERVED (1<<2)*/
#define VMAIFG (1<<3)
#define NMIIFG (1<<4)
/* RESERVED (1<<5)*/
#define JMBINIFG (1<<6)
#define JMBOUTIFG (1<<7)

#define SFRRPCR_ 0x0104 /* Reset pin control */
sfrw(SFRRPCR, SFRRPCR_);
#define SFRRPCR_L_ SFRRPCR_
#define SFRRPCR_H_ SFRRPCR_ + 0x01
sfrb(SFRRPCR_L, SFRRPCR_L_);
sfrb(SFRRPCR_H, SFRRPCR_H_);
#define SYSNMI (1<<0) /* RST/NMI pin (0:Reset, 1: NMI) */
#define SYSNMIIES (1<<1) /* NMI edge select (0:rising edge). Can trigger NMI */
#define SYSRSTUP (1<<2) /* Reset resistor pin pullup (0: pulldown, 1: pullup) */
#define SYSRSTRE (1<<3) /* Reset pin resistor enable (0: disabled, 1: enabled) */


#define RTC_A_VECTOR 0x52 /* 0xFFD2 Basic Timer / RTC */
#define PORT2_VECTOR 0x54 /* 0xFFD4 Port 2 */
#define USCIB3_RXTX_VECTOR 0x56 /* 0xFFD6 USCI B3 RX/TX */
#define USCIA3_RXTX_VECTOR 0x58 /* 0xFFD8 USCI A3 RX/TX */
#define USCIB1_RXTX_VECTOR 0x5A /* 0xFFDA USCI B1 RX/TX */
#define USCIA1_RXTX_VECTOR 0x5C /* 0xFFDC USCI A1 RX/TX */
#define PORT1_VECTOR 0x5E /* 0xFFDE Port 1 */
#define TIMER1_A1_VECTOR 0x60 /* 0xFFE0 Timer1_A3 CC1-2, TA1 */
#define TIMER1_A0_VECTOR 0x62 /* 0xFFE2 Timer1_A3 CC0 */
#define DMA_VECTOR 0x64 /* 0xFFE4 DMA */
#define USCIB2_RXTX_VECTOR 0x66 /* 0xFFE6 USCI B2 RX/TX */
#define USCIA2_RXTX_VECTOR 0x68 /* 0xFFE8 USCI A2 RX/TX */
#define TIMER0_A1_VECTOR 0x6A /* 0xFFEA Timer0_A5 CC1-4, TA0 */
#define TIMER0_A0_VECTOR 0x6C /* 0xFFEC Timer0_A5 CC0 */
#define AD12_A_VECTOR 0x6E /* 0xFFEE ADC */
#define USCIB0_RXTX_VECTOR 0x70 /* 0xFFF0 USCI B0 RX/TX */
#define USCIA0_RXTX_VECTOR 0x72 /* 0xFFF2 USCI A0 RX/TX */
#define WDT_VECTOR 0x74 /* 0xFFF4 Watchdog Timer */
#define TIMER0_B1_VECTOR 0x76 /* 0xFFF6 Timer_B7 CC1-6, TB */
#define TIMER0_B0_VECTOR 0x78 /* 0xFFF8 Timer_B7 CC0 */
#define USER_NMI_VECTOR 0x7A /* 0xFFFA Non-maskable */
#define NMI_VECTOR 0x7C /* 0xFFFC Non-maskable */

#endif /* #ifndef __msp430x54xx */


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Nov 6 2009, 12:45
Сообщение #11


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(MrYuran @ Nov 6 2009, 13:14) *
Кстати, для 54хх хедеры лежат без комментиариев, может уже и работают...

Вы посмотрите у себя файл ...\mspgcc\msp430\include\msp430\usci.h. В моей версии все регистры для старших номеров портов закомментированы. crying.gif И это для mspgcc3 и 4. (смотрю на оба варианта)


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Nov 6 2009, 12:49
Сообщение #12


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



CODE
#if !defined(__msp430_headers_usci_h__)
#define __msp430_headers_usci_h__

/* usi.h
*
* mspgcc project: MSP430 device headers
* USCI module header
*
* © 2006 by Steve Underwood <steveu@coppice.org>
* Originally based in part on work by Texas Instruments Inc.
*
* $Id: usci.h,v 1.7 2009/06/04 21:55:18 cliechti Exp $
*
* 2008-02-05 - modifications by G.Lemm <msp430@daqtix.com>
* - added UC1IE and UC1IFG registers
* - added UC*1*IE and UC*1*IFG bit definitions
* 2009-05-19 - modifications by S. Balling <praktikum@innoventis.de>
* - added switch for USCI0
* - added USCI0_5
* - added USCI1_5
* - added USCI2_5
* - added USCI3_5
*/

/* Switches:
__MSP430_HAS_USCI0__ - if device has USCI0
__MSP430_HAS_USCI1__ - if device has USCI1
__MSP430_HAS_USCI0_5__ - if device has USCI0 and is part of family 5
__MSP430_HAS_USCI1_5__ - if device has USCI1 and is part of family 5
__MSP430_HAS_USCI2_5__ - if device has USCI2 and is part of family 5
__MSP430_HAS_USCI3_5__ - if device has USCI3 and is part of family 5

*/

#define USIPE7 (0x80) /* USI Port Enable Px.7 */
#define USIPE6 (0x40) /* USI Port Enable Px.6 */
#define USIPE5 (0x20) /* USI Port Enable Px.5 */
#define USILSB (0x10) /* USI LSB first 1:LSB / 0:MSB */
#define USIMST (0x08) /* USI Master Select 0:Slave / 1:Master */
#define USIGE (0x04) /* USI General Output Enable Latch */
#define USIOE (0x02) /* USI Output Enable */
#define USISWRST (0x01) /* USI Software Reset */

#define USICKPH (0x80) /* USI Sync. Mode: Clock Phase */
#define USII2C (0x40) /* USI I2C Mode */
#define USISTTIE (0x20) /* USI START Condition interrupt enable */
#define USIIE (0x10) /* USI Counter Interrupt enable */
#define USIAL (0x08) /* USI Arbitration Lost */
#define USISTP (0x04) /* USI STOP Condition received */
#define USISTTIFG (0x02) /* USI START Condition interrupt Flag */
#define USIIFG (0x01) /* USI Counter Interrupt Flag */

#define USIDIV2 (0x80) /* USI Clock Divider 2 */
#define USIDIV1 (0x40) /* USI Clock Divider 1 */
#define USIDIV0 (0x20) /* USI Clock Divider 0 */
#define USISSEL2 (0x10) /* USI Clock Source Select 2 */
#define USISSEL1 (0x08) /* USI Clock Source Select 1 */
#define USISSEL0 (0x04) /* USI Clock Source Select 0 */
#define USICKPL (0x02) /* USI Clock Polarity 0:Inactive=Low / 1:Inactive=High */
#define USISWCLK (0x01) /* USI Software Clock */

#define USIDIV_0 (0x00) /* USI Clock Divider: 0 */
#define USIDIV_1 (0x20) /* USI Clock Divider: 1 */
#define USIDIV_2 (0x40) /* USI Clock Divider: 2 */
#define USIDIV_3 (0x60) /* USI Clock Divider: 3 */
#define USIDIV_4 (0x80) /* USI Clock Divider: 4 */
#define USIDIV_5 (0xA0) /* USI Clock Divider: 5 */
#define USIDIV_6 (0xC0) /* USI Clock Divider: 6 */
#define USIDIV_7 (0xE0) /* USI Clock Divider: 7 */

#define USISSEL_0 (0x00) /* USI Clock Source: 0 */
#define USISSEL_1 (0x04) /* USI Clock Source: 1 */
#define USISSEL_2 (0x08) /* USI Clock Source: 2 */
#define USISSEL_3 (0x0C) /* USI Clock Source: 3 */
#define USISSEL_4 (0x10) /* USI Clock Source: 4 */
#define USISSEL_5 (0x14) /* USI Clock Source: 5 */
#define USISSEL_6 (0x18) /* USI Clock Source: 6 */
#define USISSEL_7 (0x1C) /* USI Clock Source: 7 */

#define USISCLREL (0x80) /* USI SCL Released */
#define USI16B (0x40) /* USI 16 Bit Shift Register Enable */
#define USIFGDC (0x20) /* USI Interrupt Flag don't clear */
#define USICNT4 (0x10) /* USI Bit Count 4 */
#define USICNT3 (0x08) /* USI Bit Count 3 */
#define USICNT2 (0x04) /* USI Bit Count 2 */
#define USICNT1 (0x02) /* USI Bit Count 1 */
#define USICNT0 (0x01) /* USI Bit Count 0 */

// UART-Mode Bits
#define UCPEN (0x80) /* Async. Mode: Parity enable */
#define UCPAR (0x40) /* Async. Mode: Parity 0:odd / 1:even */
#define UCMSB (0x20) /* Async. Mode: MSB first 0:LSB / 1:MSB */
#define UC7BIT (0x10) /* Async. Mode: Data Bits 0:8-bits / 1:7-bits */
#define UCSPB (0x08) /* Async. Mode: Stop Bits 0:one / 1: two */
#define UCMODE1 (0x04) /* Async. Mode: USCI Mode 1 */
#define UCMODE0 (0x02) /* Async. Mode: USCI Mode 0 */
#define UCSYNC (0x01) /* Sync-Mode 0:UART-Mode / 1:SPI-Mode */

// SPI-Mode Bits
#define UCCKPH (0x80) /* Sync. Mode: Clock Phase */
#define UCCKPL (0x40) /* Sync. Mode: Clock Polarity */
#define UCMST (0x08) /* Sync. Mode: Master Select */

// I2C-Mode Bits
#define UCA10 (0x80) /* 10-bit Address Mode */
#define UCSLA10 (0x40) /* 10-bit Slave Address Mode */
#define UCMM (0x20) /* Multi-Master Environment */
//#define res (0x10) /* reserved */
#define UCMODE_0 (0<<1) /* Sync. Mode: USCI Mode: 0 */
#define UCMODE_1 (1<<1) /* Sync. Mode: USCI Mode: 1 */
#define UCMODE_2 (2<<1) /* Sync. Mode: USCI Mode: 2 */
#define UCMODE_3 (3<<1) /* Sync. Mode: USCI Mode: 3 */

// UART-Mode Bits
#define UCSSEL1 (0x80) /* USCI 0 Clock Source Select 1 */
#define UCSSEL0 (0x40) /* USCI 0 Clock Source Select 0 */
#define UCRXEIE (0x20) /* RX Error interrupt enable */
#define UCBRKIE (0x10) /* Break interrupt enable */
#define UCDORM (0x08) /* Dormant (Sleep) Mode */
#define UCTXADDR (0x04) /* Send next Data as Address */
#define UCTXBRK (0x02) /* Send next Data as Break */
#define UCSWRST (0x01) /* USCI Software Reset */

// SPI-Mode Bits
//#define res (0x20) /* reserved */
//#define res (0x10) /* reserved */
//#define res (0x08) /* reserved */
//#define res (0x04) /* reserved */
//#define res (0x02) /* reserved */

// I2C-Mode Bits
//#define res (0x20) /* reserved */
#define UCTR (0x10) /* Transmit/Receive Select/Flag */
#define UCTXNACK (0x08) /* Transmit NACK */
#define UCTXSTP (0x04) /* Transmit STOP */
#define UCTXSTT (0x02) /* Transmit START */
#define UCSSEL_0 (0<<6) /* USCI 0 Clock Source: 0 */
#define UCSSEL_1 (1<<6) /* USCI 0 Clock Source: 1 */
#define UCSSEL_2 (2<<6) /* USCI 0 Clock Source: 2 */
#define UCSSEL_3 (3<<6) /* USCI 0 Clock Source: 3 */

#define UCBRF3 (0x80) /* USCI First Stage Modulation Select 3 */
#define UCBRF2 (0x40) /* USCI First Stage Modulation Select 2 */
#define UCBRF1 (0x20) /* USCI First Stage Modulation Select 1 */
#define UCBRF0 (0x10) /* USCI First Stage Modulation Select 0 */
#define UCBRS2 (0x08) /* USCI Second Stage Modulation Select 2 */
#define UCBRS1 (0x04) /* USCI Second Stage Modulation Select 1 */
#define UCBRS0 (0x02) /* USCI Second Stage Modulation Select 0 */
#define UCOS16 (0x01) /* USCI 16-times Oversampling enable */

#define UCBRF_0 (0x0<<4) /* USCI First Stage Modulation: 0 */
#define UCBRF_1 (0x1<<4) /* USCI First Stage Modulation: 1 */
#define UCBRF_2 (0x2<<4) /* USCI First Stage Modulation: 2 */
#define UCBRF_3 (0x3<<4) /* USCI First Stage Modulation: 3 */
#define UCBRF_4 (0x4<<4) /* USCI First Stage Modulation: 4 */
#define UCBRF_5 (0x5<<4) /* USCI First Stage Modulation: 5 */
#define UCBRF_6 (0x6<<4) /* USCI First Stage Modulation: 6 */
#define UCBRF_7 (0x7<<4) /* USCI First Stage Modulation: 7 */
#define UCBRF_8 (0x8<<4) /* USCI First Stage Modulation: 8 */
#define UCBRF_9 (0x9<<4) /* USCI First Stage Modulation: 9 */
#define UCBRF_10 (0xA<<4) /* USCI First Stage Modulation: A */
#define UCBRF_11 (0xB<<4) /* USCI First Stage Modulation: B */
#define UCBRF_12 (0xC<<4) /* USCI First Stage Modulation: C */
#define UCBRF_13 (0xD<<4) /* USCI First Stage Modulation: D */
#define UCBRF_14 (0xE<<4) /* USCI First Stage Modulation: E */
#define UCBRF_15 (0xF<<4) /* USCI First Stage Modulation: F */

#define UCBRS_0 (0<<1) /* USCI Second Stage Modulation: 0 */
#define UCBRS_1 (1<<1) /* USCI Second Stage Modulation: 1 */
#define UCBRS_2 (2<<1) /* USCI Second Stage Modulation: 2 */
#define UCBRS_3 (3<<1) /* USCI Second Stage Modulation: 3 */
#define UCBRS_4 (4<<1) /* USCI Second Stage Modulation: 4 */
#define UCBRS_5 (5<<1) /* USCI Second Stage Modulation: 5 */
#define UCBRS_6 (6<<1) /* USCI Second Stage Modulation: 6 */
#define UCBRS_7 (7<<1) /* USCI Second Stage Modulation: 7 */

#define UCLISTEN (0x80) /* USCI Listen mode */
#define UCFE (0x40) /* USCI Frame Error Flag */
#define UCOE (0x20) /* USCI Overrun Error Flag */
#define UCPE (0x10) /* USCI Parity Error Flag */
#define UCBRK (0x08) /* USCI Break received */
#define UCRXERR (0x04) /* USCI RX Error Flag */
#define UCADDR (0x02) /* USCI Address received Flag */
#define UCBUSY (0x01) /* USCI Busy Flag */
#define UCIDLE (0x02) /* USCI Idle line detected Flag */

//#define res (0x80) /* reserved */
//#define res (0x40) /* reserved */
//#define res (0x20) /* reserved */
//#define res (0x10) /* reserved */
#define UCNACKIE (0x08) /* NACK Condition interrupt enable */
#define UCSTPIE (0x04) /* STOP Condition interrupt enable */
#define UCSTTIE (0x02) /* START Condition interrupt enable */
#define UCALIE (0x01) /* Arbitration Lost interrupt enable */

#define UCSCLLOW (0x40) /* SCL low */
#define UCGC (0x20) /* General Call address received Flag */
#define UCBBUSY (0x10) /* Bus Busy Flag */
#define UCNACKIFG (0x08) /* NAK Condition interrupt Flag */
#define UCSTPIFG (0x04) /* STOP Condition interrupt Flag */
#define UCSTTIFG (0x02) /* START Condition interrupt Flag */
#define UCALIFG (0x01) /* Arbitration Lost interrupt Flag */

#define UCIRTXPL5 (0x80) /* IRDA Transmit Pulse Length 5 */
#define UCIRTXPL4 (0x40) /* IRDA Transmit Pulse Length 4 */
#define UCIRTXPL3 (0x20) /* IRDA Transmit Pulse Length 3 */
#define UCIRTXPL2 (0x10) /* IRDA Transmit Pulse Length 2 */
#define UCIRTXPL1 (0x08) /* IRDA Transmit Pulse Length 1 */
#define UCIRTXPL0 (0x04) /* IRDA Transmit Pulse Length 0 */
#define UCIRTXCLK (0x02) /* IRDA Transmit Pulse Clock Select */
#define UCIREN (0x01) /* IRDA Encoder/Decoder enable */

#define UCIRRXFL5 (0x80) /* IRDA Receive Filter Length 5 */
#define UCIRRXFL4 (0x40) /* IRDA Receive Filter Length 4 */
#define UCIRRXFL3 (0x20) /* IRDA Receive Filter Length 3 */
#define UCIRRXFL2 (0x10) /* IRDA Receive Filter Length 2 */
#define UCIRRXFL1 (0x08) /* IRDA Receive Filter Length 1 */
#define UCIRRXFL0 (0x04) /* IRDA Receive Filter Length 0 */
#define UCIRRXPL (0x02) /* IRDA Receive Input Polarity */
#define UCIRRXFE (0x01) /* IRDA Receive Filter enable */

//#define res (0x80) /* reserved */
//#define res (0x40) /* reserved */
#define UCDELIM1 (0x20) /* Break Sync Delimiter 1 */
#define UCDELIM0 (0x10) /* Break Sync Delimiter 0 */
#define UCSTOE (0x08) /* Sync-Field Timeout error */
#define UCBTOE (0x04) /* Break Timeout error */
//#define res (0x02) /* reserved */
#define UCABDEN (0x01) /* Auto Baud Rate detect enable */

#define UCGCEN (0x8000) /* I2C General Call enable */
#define UCOA9 (0x0200) /* I2C Own Address 9 */
#define UCOA8 (0x0100) /* I2C Own Address 8 */
#define UCOA7 (0x0080) /* I2C Own Address 7 */
#define UCOA6 (0x0040) /* I2C Own Address 6 */
#define UCOA5 (0x0020) /* I2C Own Address 5 */
#define UCOA4 (0x0010) /* I2C Own Address 4 */
#define UCOA3 (0x0008) /* I2C Own Address 3 */
#define UCOA2 (0x0004) /* I2C Own Address 2 */
#define UCOA1 (0x0002) /* I2C Own Address 1 */
#define UCOA0 (0x0001) /* I2C Own Address 0 */

#define UCSA9 (0x0200) /* I2C Slave Address 9 */
#define UCSA8 (0x0100) /* I2C Slave Address 8 */
#define UCSA7 (0x0080) /* I2C Slave Address 7 */
#define UCSA6 (0x0040) /* I2C Slave Address 6 */
#define UCSA5 (0x0020) /* I2C Slave Address 5 */
#define UCSA4 (0x0010) /* I2C Slave Address 4 */
#define UCSA3 (0x0008) /* I2C Slave Address 3 */
#define UCSA2 (0x0004) /* I2C Slave Address 2 */
#define UCSA1 (0x0002) /* I2C Slave Address 1 */
#define UCSA0 (0x0001) /* I2C Slave Address 0 */

/* Aliases by mspgcc */
#define UCSSEL_UCLKI UCSSEL_0
#define UCSSEL_ACLK UCSSEL_1
#define UCSSEL_SMCLK UCSSEL_2

#if defined(__MSP430_HAS_USCI0__)

/* -------- USCI0 */

#define UCA0CTL0_ 0x0060 /* USCI A0 Control Register 0 */
sfrb(UCA0CTL0, UCA0CTL0_);
#define UCA0CTL1_ 0x0061 /* USCI A0 Control Register 1 */
sfrb(UCA0CTL1, UCA0CTL1_);
#define UCA0BR0_ 0x0062 /* USCI A0 Baud Rate 0 */
sfrb(UCA0BR0, UCA0BR0_);
#define UCA0BR1_ 0x0063 /* USCI A0 Baud Rate 1 */
sfrb(UCA0BR1, UCA0BR1_);
#define UCA0MCTL_ 0x0064 /* USCI A0 Modulation Control */
sfrb(UCA0MCTL, UCA0MCTL_);
#define UCA0STAT_ 0x0065 /* USCI A0 Status Register */
sfrb(UCA0STAT, UCA0STAT_);
#define UCA0RXBUF_ 0x0066 /* USCI A0 Receive Buffer */
/*READ_ONLY*/ sfrb(UCA0RXBUF, UCA0RXBUF_);
#define UCA0TXBUF_ 0x0067 /* USCI A0 Transmit Buffer */
sfrb(UCA0TXBUF, UCA0TXBUF_);
#define UCA0ABCTL_ 0x005D /* USCI A0 Auto baud/LIN Control */
sfrb(UCA0ABCTL, UCA0ABCTL_);
#define UCA0IRTCTL_ 0x005E /* USCI A0 IrDA Transmit Control */
sfrb(UCA0IRTCTL, UCA0IRTCTL_);
#define UCA0IRRCTL_ 0x005F /* USCI A0 IrDA Receive Control */
sfrb(UCA0IRRCTL, UCA0IRRCTL_);

#define UCB0CTL0_ 0x0068 /* USCI B0 Control Register 0 */
sfrb(UCB0CTL0, UCB0CTL0_);
#define UCB0CTL1_ 0x0069 /* USCI B0 Control Register 1 */
sfrb(UCB0CTL1, UCB0CTL1_);
#define UCB0BR0_ 0x006A /* USCI B0 Baud Rate 0 */
sfrb(UCB0BR0, UCB0BR0_);
#define UCB0BR1_ 0x006B /* USCI B0 Baud Rate 1 */
sfrb(UCB0BR1, UCB0BR1_);
#define UCB0I2CIE_ 0x006C /* USCI B0 I2C Interrupt Enable Register */
sfrb(UCB0I2CIE, UCB0I2CIE_);
#define UCB0STAT_ 0x006D /* USCI B0 Status Register */
sfrb(UCB0STAT, UCB0STAT_);
#define UCB0RXBUF_ 0x006E /* USCI B0 Receive Buffer */
/*READ_ONLY*/ sfrb(UCB0RXBUF, UCB0RXBUF_);
#define UCB0TXBUF_ 0x006F /* USCI B0 Transmit Buffer */
sfrb(UCB0TXBUF, UCB0TXBUF_);
#define UCB0I2COA_ 0x0118 /* USCI B0 I2C Own Address */
sfrw(UCB0I2COA, UCB0I2COA_);
#define UCB0I2CSA_ 0x011A /* USCI B0 I2C Slave Address */
sfrw(UCB0I2CSA, UCB0I2CSA_);
#endif /* __MSP430_HAS_USCI0__ */

#if defined(__MSP430_HAS_USCI1__)

/* -------- USCI1 */

#define UCA1CTL0_ 0x00D0 /* USCI A1 Control Register 0 */
sfrb(UCA1CTL0, UCA1CTL0_);
#define UCA1CTL1_ 0x00D1 /* USCI A1 Control Register 1 */
sfrb(UCA1CTL1, UCA1CTL1_);
#define UCA1BR0_ 0x00D2 /* USCI A1 Baud Rate 0 */
sfrb(UCA1BR0, UCA1BR0_);
#define UCA1BR1_ 0x00D3 /* USCI A1 Baud Rate 1 */
sfrb(UCA1BR1, UCA1BR1_);
#define UCA1MCTL_ 0x00D4 /* USCI A1 Modulation Control */
sfrb(UCA1MCTL, UCA1MCTL_);
#define UCA1STAT_ 0x00D5 /* USCI A1 Status Register */
sfrb(UCA1STAT, UCA1STAT_);
#define UCA1RXBUF_ 0x00D6 /* USCI A1 Receive Buffer */
/*READ_ONLY*/ sfrb(UCA1RXBUF, UCA1RXBUF_);
#define UCA1TXBUF_ 0x00D7 /* USCI A1 Transmit Buffer */
sfrb(UCA1TXBUF, UCA1TXBUF_);
#define UCA1ABCTL_ 0x00CD /* USCI A1 Auto baud/LIN Control */
sfrb(UCA1ABCTL, UCA1ABCTL_);
#define UCA1IRTCTL_ 0x00CE /* USCI A1 IrDA Transmit Control */
sfrb(UCA1IRTCTL, UCA1IRTCTL_);
#define UCA1IRRCTL_ 0x00CF /* USCI A1 IrDA Receive Control */
sfrb(UCA1IRRCTL, UCA1IRRCTL_);

#define UCB1CTL0_ 0x00D8 /* USCI B1 Control Register 0 */
sfrb(UCB1CTL0, UCB1CTL0_);
#define UCB1CTL1_ 0x00D9 /* USCI B1 Control Register 1 */
sfrb(UCB1CTL1, UCB1CTL1_);
#define UCB1BR0_ 0x00DA /* USCI B1 Baud Rate 0 */
sfrb(UCB1BR0, UCB1BR0_);
#define UCB1BR1_ 0x00DB /* USCI B1 Baud Rate 1 */
sfrb(UCB1BR1, UCB1BR1_);
#define UCB1I2CIE_ 0x00DC /* USCI B1 I2C Interrupt Enable Register */
sfrb(UCB1I2CIE, UCB1I2CIE_);
#define UCB1STAT_ 0x00DD /* USCI B1 Status Register */
sfrb(UCB1STAT, UCB1STAT_);
#define UCB1RXBUF_ 0x00DE /* USCI B1 Receive Buffer */
/*READ_ONLY*/ sfrb(UCB1RXBUF, UCB1RXBUF_);
#define UCB1TXBUF_ 0x00DF /* USCI B1 Transmit Buffer */
sfrb(UCB1TXBUF, UCB1TXBUF_);
#define UCB1I2COA_ 0x017C /* USCI B1 I2C Own Address */
sfrw(UCB1I2COA, UCB1I2COA_);
#define UCB1I2CSA_ 0x017E /* USCI B1 I2C Slave Address */
sfrw(UCB1I2CSA, UCB1I2CSA_);

#define UC1IE_ 0x0006 /* USCI A1/B1 Interrupt enable register */
sfrb(UC1IE, UC1IE_);
#define UC1IFG_ 0x0007 /* USCI A1/B1 Interrupt flag register */
sfrb(UC1IFG, UC1IFG_);

#define UCA1RXIE (1<<0)
#define UCA1TXIE (1<<1)
#define UCB1RXIE (1<<2)
#define UCB1TXIE (1<<3)

#define UCA1RXIFG (1<<0)
#define UCA1TXIFG (1<<1)
#define UCB1RXIFG (1<<2)
#define UCB1TXIFG (1<<3)
#endif /* __MSP430_HAS_USCI1__ */

#if defined(__MSP430_HAS_USCI0_5__)

/* -------- USCI0_5 */

#define UCA0CTL0_ 0x05C1
sfrb(UCA0CTL0, UCA0CTL0_);
#define UCA0CTL1_ 0x05C0
sfrb(UCA0CTL1, UCA0CTL1_);
#define UCA0BR0_ 0x05C6
sfrb(UCA0BR0, UCA0BR0_);
#define UCA0BR1_ 0x05C7
sfrb(UCA0BR1, UCA0BR1_);
#define UCA0MCTL_ 0x05C8
sfrb(UCA0MCTL, UCA0MCTL_);
#define UCA0STAT_ 0x05CA
sfrb(UCA0STAT, UCA0STAT_);
#define UCA0RXBUF_ 0x05CC
sfrb(UCA0RXBUF, UCA0RXBUF_);
#define UCA0TXBUF_ 0x05CE
sfrb(UCA0TXBUF, UCA0TXBUF_);
#define UCA0ABCTL_ 0x05D0
sfrb(UCA0ABCTL, UCA0ABCTL_);
#define UCA0IRTCTL_ 0x05D2
sfrb(UCA0IRTCTL, UCA0IRTCTL_);
#define UCA0IRRCTL_ 0x05D3
sfrb(UCA0IRRCTL, UCA0IRRCTL_);
#define UCA0IE_ 0x05DC
sfrb(UCA0IE, UCA0IE_);
#define UCA0IFG_ 0x05DD
sfrb(UCA0IFG, UCA0IFG_);
#define UCA0IV_ 0x05DE
sfrw(UCA0IV, UCA0IV_);
#define UCA0IV_L_ 0x05DE
sfrb(UCA0IV_L, UCA0IV_L_);
#define UCA0IV_H_ 0x05DF
sfrb(UCA0IV_H, UCA0IV_H_);

#define UCB0CTL0_ 0x05E1
sfrb(UCB0CTL0, UCB0CTL0_);
#define UCB0CTL1_ 0x05E0
sfrb(UCB0CTL1, UCB0CTL1_);
#define UCB0BR0_ 0x05E6
sfrb(UCB0BR0, UCB0BR0_);
#define UCB0BR1_ 0x05E7
sfrb(UCB0BR1, UCB0BR1_);
#define UCB0MCTL_ 0x05E8
sfrb(UCB0MCTL, UCB0MCTL_);
#define UCB0STAT_ 0x05EA
sfrb(UCB0STAT, UCB0STAT_);
#define UCB0RXBUF_ 0x05EC
sfrb(UCB0RXBUF, UCB0RXBUF_);
#define UCB0TXBUF_ 0x05EE
sfrb(UCB0TXBUF, UCB0TXBUF_);
#define UCB0I2COA_ 0x05F0
sfrb(UCB0I2COA, UCB0I2COA_);
#define UCB0I2CSA_ 0x05F2
sfrb(UCB0I2CSA, UCB0I2CSA_);
#define UCB0IE_ 0x05FC
sfrb(UCB0IE, UCB0IE_);
#define UCB0IFG_ 0x05FD
sfrb(UCB0IFG, UCB0IFG_);
#define UCB0IV_ 0x05FE
sfrw(UCB0IV, UCB0IV_);
#define UCB0IV_L_ 0x05FE
sfrb(UCB0IV_L, UCB0IV_L_);
#define UCB0IV_H_ 0x05FF
sfrb(UCB0IV_H, UCB0IV_H_);

#endif /* __MSP430_HAS_USCI0_5__ */

#if defined(__MSP430_HAS_USCI1_5__)

/* -------- USCI1_5 */

// tbd
/*#define UCA1CTL0_ 0x0601
#define UCA1CTL0_L 0x0601
#define UCA1CTL0_H 0x0602
#define UCA1CTL1_ 0x0600
#define UCA1CTL1_L 0x0600
#define UCA1CTL1_H 0x0601
#define UCA1BR0_ 0x0606
#define UCA1BR0_L 0x0606
#define UCA1BR0_H 0x0607
#define UCA1BR1_ 0x0607
#define UCA1BR1_L 0x0607
#define UCA1BR1_H 0x0608
#define UCA1MCTL_ 0x0608
#define UCA1MCTL_L 0x0608
#define UCA1MCTL_H 0x0609
#define UCA1STAT_ 0x060A
#define UCA1STAT_L 0x060A
#define UCA1STAT_H 0x060B
#define UCA1RXBUF 0x060C
#define UCA1RXBUF_L 0x060C
#define UCA1RXBUF_H 0x060D
#define UCA1TXBUF 0x060E
#define UCA1TXBUF_L 0x060E
#define UCA1TXBUF_H 0x060F
#define UCA1ABCTL 0x0610
#define UCA1ABCTL_L 0x0610
#define UCA1ABCTL_H 0x0611
#define UCA1IRTCTL 0x0612
#define UCA1IRTCTL_L 0x0612
#define UCA1IRTCTL_H 0x0613
#define UCA1IRRCTL 0x0613
#define UCA1IRRCTL_L 0x0613
#define UCA1IRRCTL_H 0x0614
#define UCA1IE_ 0x061C
#define UCA1IE_L_ 0x061C
#define UCA1IE_H_ 0x061D
#define UCA1IFG_ 0x061D
#define UCA1IFG_L 0x061D
#define UCA1IFG_H 0x061E
#define UCA1IV_ 0x061E
#define UCA1IV_L_ 0x061E
#define UCA1IV_H_ 0x061F
#define UCB1CTL0_ 0x0621
#define UCB1CTL0_L 0x0621
#define UCB1CTL0_H 0x0622
#define UCB1CTL1_ 0x0620
#define UCB1CTL1_L 0x0620
#define UCB1CTL1_H 0x0621
#define UCB1BR0_ 0x0626
#define UCB1BR0_L 0x0626
#define UCB1BR0_H 0x0627
#define UCB1BR1_ 0x0627
#define UCB1BR1_L 0x0627
#define UCB1BR1_H 0x0628
#define UCB1STAT_ 0x062A
#define UCB1STAT_L 0x062A
#define UCB1STAT_H 0x062B
#define UCB1RXBUF 0x062C
#define UCB1RXBUF_L 0x062C
#define UCB1RXBUF_H 0x062D
#define UCB1TXBUF 0x062E
#define UCB1TXBUF_L 0x062E
#define UCB1TXBUF_H 0x062F
#define UCB1I2COA 0x0630
#define UCB1I2COA_L 0x0630
#define UCB1I2COA_H 0x0631
#define UCB1I2CSA 0x0632
#define UCB1I2CSA_L 0x0632
#define UCB1I2CSA_H 0x0633
#define UCB1IE_ 0x063C
#define UCB1IE_L_ 0x063C
#define UCB1IE_H_ 0x063D
#define UCB1IFG_ 0x063D
#define UCB1IFG_L 0x063D
#define UCB1IFG_H 0x063E
#define UCB1IV_ 0x063E
#define UCB1IV_L_ 0x063E
#define UCB1IV_H_ 0x063F
*/
#endif /* __MSP430_HAS_USCI1_5__ */

#if defined(__MSP430_HAS_USCI2_5__)

/* -------- USCI2_5 */

// tbd
/*#define UCA2CTL0_ 0x0641
#define UCA2CTL0_L 0x0641
#define UCA2CTL0_H 0x0642
#define UCA2CTL1_ 0x0640
#define UCA2CTL1_L 0x0640
#define UCA2CTL1_H 0x0641
#define UCA2BR0_ 0x0646
#define UCA2BR0_L 0x0646
#define UCA2BR0_H 0x0647
#define UCA2BR1_ 0x0647
#define UCA2BR1_L 0x0647
#define UCA2BR1_H 0x0648
#define UCA2MCTL_ 0x0648
#define UCA2MCTL_L 0x0648
#define UCA2MCTL_H 0x0649
#define UCA2STAT_ 0x064A
#define UCA2STAT_L 0x064A
#define UCA2STAT_H 0x064B
#define UCA2RXBUF 0x064C
#define UCA2RXBUF_L 0x064C
#define UCA2RXBUF_H 0x064D
#define UCA2TXBUF 0x064E
#define UCA2TXBUF_L 0x064E
#define UCA2TXBUF_H 0x064F
#define UCA2ABCTL 0x0650
#define UCA2ABCTL_L 0x0650
#define UCA2ABCTL_H 0x0651
#define UCA2IRTCTL 0x0652
#define UCA2IRTCTL_L 0x0652
#define UCA2IRTCTL_H 0x0653
#define UCA2IRRCTL 0x0653
#define UCA2IRRCTL_L 0x0653
#define UCA2IRRCTL_H 0x0654
#define UCA2IE_ 0x065C
#define UCA2IE_L_ 0x065C
#define UCA2IE_H_ 0x065D
#define UCA2IFG_ 0x065D
#define UCA2IFG_L 0x065D
#define UCA2IFG_H 0x065E
#define UCA2IV_ 0x065E
#define UCA2IV_L_ 0x065E
#define UCA2IV_H_ 0x065F
#define UCB2CTL0_ 0x0661
#define UCB2CTL0_L 0x0661
#define UCB2CTL0_H 0x0662
#define UCB2CTL1_ 0x0660
#define UCB2CTL1_L 0x0660
#define UCB2CTL1_H 0x0661
#define UCB2BR0_ 0x0666
#define UCB2BR0_L 0x0666
#define UCB2BR0_H 0x0667
#define UCB2BR1_ 0x0667
#define UCB2BR1_L 0x0667
#define UCB2BR1_H 0x0668
#define UCB2STAT_ 0x066A
#define UCB2STAT_L 0x066A
#define UCB2STAT_H 0x066B
#define UCB2RXBUF 0x066C
#define UCB2RXBUF_L 0x066C
#define UCB2RXBUF_H 0x066D
#define UCB2TXBUF 0x066E
#define UCB2TXBUF_L 0x066E
#define UCB2TXBUF_H 0x066F
#define UCB2I2COA 0x0670
#define UCB2I2COA_L 0x0670
#define UCB2I2COA_H 0x0671
#define UCB2I2CSA 0x0672
#define UCB2I2CSA_L 0x0672
#define UCB2I2CSA_H 0x0673
#define UCB2IE_ 0x067C
#define UCB2IE_L_ 0x067C
#define UCB2IE_H_ 0x067D
#define UCB2IFG_ 0x067D
#define UCB2IFG_L 0x067D
#define UCB2IFG_H 0x067E
#define UCB2IV_ 0x067E
#define UCB2IV_L_ 0x067E
#define UCB2IV_H_ 0x067F
*/
#endif /* __MSP430_HAS_USCI2_5__ */

#if defined(__MSP430_HAS_USCI3_5__)

/* -------- USCI3_5 */
// tbd
/*#define UCA3CTL0_ 0x0681
#define UCA3CTL0_L 0x0681
#define UCA3CTL0_H 0x0682
#define UCA3CTL1_ 0x0680
#define UCA3CTL1_L 0x0680
#define UCA3CTL1_H 0x0681
#define UCA3BR0_ 0x0686
#define UCA3BR0_L 0x0686
#define UCA3BR0_H 0x0687
#define UCA3BR1_ 0x0687
#define UCA3BR1_L 0x0687
#define UCA3BR1_H 0x0688
#define UCA3MCTL_ 0x0688
#define UCA3MCTL_L 0x0688
#define UCA3MCTL_H 0x0689
#define UCA3STAT_ 0x068A
#define UCA3STAT_L 0x068A
#define UCA3STAT_H 0x068B
#define UCA3RXBUF 0x068C
#define UCA3RXBUF_L 0x068C
#define UCA3RXBUF_H 0x068D
#define UCA3TXBUF 0x068E
#define UCA3TXBUF_L 0x068E
#define UCA3TXBUF_H 0x068F
#define UCA3ABCTL 0x0690
#define UCA3ABCTL_L 0x0690
#define UCA3ABCTL_H 0x0691
#define UCA3IRTCTL 0x0692
#define UCA3IRTCTL_L 0x0692
#define UCA3IRTCTL_H 0x0693
#define UCA3IRRCTL 0x0693
#define UCA3IRRCTL_L 0x0693
#define UCA3IRRCTL_H 0x0694
#define UCA3IE_ 0x069C
#define UCA3IE_L_ 0x069C
#define UCA3IE_H_ 0x069D
#define UCA3IFG_ 0x069D
#define UCA3IFG_L 0x069D
#define UCA3IFG_H 0x069E
#define UCA3IV_ 0x069E
#define UCA3IV_L_ 0x069E
#define UCA3IV_H_ 0x069F
#define UCB3CTL0_ 0x06A1
#define UCB3CTL0_L 0x06A1
#define UCB3CTL0_H 0x06A2
#define UCB3CTL1_ 0x06A0
#define UCB3CTL1_L 0x06A0
#define UCB3CTL1_H 0x06A1
#define UCB3BR0_ 0x06A6
#define UCB3BR0_L 0x06A6
#define UCB3BR0_H 0x06A7
#define UCB3BR1_ 0x06A7
#define UCB3BR1_L 0x06A7
#define UCB3BR1_H 0x06A8
#define UCB3STAT_ 0x06AA
#define UCB3STAT_L 0x06AA
#define UCB3STAT_H 0x06AB
#define UCB3RXBUF 0x06AC
#define UCB3RXBUF_L 0x06AC
#define UCB3RXBUF_H 0x06AD
#define UCB3TXBUF 0x06AE
#define UCB3TXBUF_L 0x06AE
#define UCB3TXBUF_H 0x06AF
#define UCB3I2COA 0x06B0
#define UCB3I2COA_L 0x06B0
#define UCB3I2COA_H 0x06B1
#define UCB3I2CSA 0x06B2
#define UCB3I2CSA_L 0x06B2
#define UCB3I2CSA_H 0x06B3
#define UCB3IE_ 0x06BC
#define UCB3IE_L_ 0x06BC
#define UCB3IE_H_ 0x06BD
#define UCB3IFG_ 0x06BD
#define UCB3IFG_L 0x06BD
#define UCB3IFG_H 0x06BE
#define UCB3IV_ 0x06BE
#define UCB3IV_L_ 0x06BE
#define UCB3IV_H_ 0x06BF
*/
#endif /* __MSP430_HAS_USCI3_5__ */

#endif

Прогресс прогрессирует?


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 6 2009, 13:09
Сообщение #13


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(MrYuran @ Nov 6 2009, 12:14) *
Кстати, для 54хх хедеры лежат без комментиариев, может уже и работают...
если вы зайдете в репозиторий mspgcc4, то увидите, что файлы msp430-libc там отсутствуют. Они цельнотянуты из mspgcc. А заглянув в репозиторий mspgcc можно легко проследить состояние каждого файла. Там видно, что последняя правка была в июне - добавили таймер A, тактирование и usart.

P.S. Вы так настойчиво ждете каких-то дополнений в этом файле, что можно было уже 10 раз написать их самостоятельно, оттестировать и послать патч Крису.
P.P.S. В списке рассылки проскакивала информация, что репозиторий будут перетаскивать под bazaar. Чем закончилось - не знаю.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Nov 6 2009, 13:56
Сообщение #14


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(MrYuran @ Nov 6 2009, 15:49) *
CODE
#if !defined(__msp430_headers_usci_h__)
#if defined(__MSP430_HAS_USCI3_5__)

/* -------- USCI3_5 */
// tbd
/*#define UCA3CTL0_ 0x0681 <!!!!!!!!!!!!!!!! comment begin
#define UCA3CTL0_L 0x0681
#define UCA3CTL0_H 0x0682
#define UCA3CTL1_ 0x0680
#define UCA3CTL1_L 0x0680
#define UCA3CTL1_H 0x0681
#define UCA3BR0_ 0x0686
#define UCA3BR0_L 0x0686
#define UCA3BR0_H 0x0687
#define UCA3BR1_ 0x0687
#define UCA3BR1_L 0x0687
#define UCA3BR1_H 0x0688
#define UCA3MCTL_ 0x0688
#define UCA3MCTL_L 0x0688
#define UCA3MCTL_H 0x0689
#define UCA3STAT_ 0x068A
#define UCA3STAT_L 0x068A
#define UCA3STAT_H 0x068B
#define UCA3RXBUF 0x068C
#define UCA3RXBUF_L 0x068C
#define UCA3RXBUF_H 0x068D
#define UCA3TXBUF 0x068E
#define UCA3TXBUF_L 0x068E
#define UCA3TXBUF_H 0x068F
#define UCA3ABCTL 0x0690
#define UCA3ABCTL_L 0x0690
#define UCA3ABCTL_H 0x0691
#define UCA3IRTCTL 0x0692
#define UCA3IRTCTL_L 0x0692
#define UCA3IRTCTL_H 0x0693
#define UCA3IRRCTL 0x0693
#define UCA3IRRCTL_L 0x0693
#define UCA3IRRCTL_H 0x0694
#define UCA3IE_ 0x069C
#define UCA3IE_L_ 0x069C
#define UCA3IE_H_ 0x069D
#define UCA3IFG_ 0x069D
#define UCA3IFG_L 0x069D
#define UCA3IFG_H 0x069E
#define UCA3IV_ 0x069E
#define UCA3IV_L_ 0x069E
#define UCA3IV_H_ 0x069F
#define UCB3CTL0_ 0x06A1
#define UCB3CTL0_L 0x06A1
#define UCB3CTL0_H 0x06A2
#define UCB3CTL1_ 0x06A0
#define UCB3CTL1_L 0x06A0
#define UCB3CTL1_H 0x06A1
#define UCB3BR0_ 0x06A6
#define UCB3BR0_L 0x06A6
#define UCB3BR0_H 0x06A7
#define UCB3BR1_ 0x06A7
#define UCB3BR1_L 0x06A7
#define UCB3BR1_H 0x06A8
#define UCB3STAT_ 0x06AA
#define UCB3STAT_L 0x06AA
#define UCB3STAT_H 0x06AB
#define UCB3RXBUF 0x06AC
#define UCB3RXBUF_L 0x06AC
#define UCB3RXBUF_H 0x06AD
#define UCB3TXBUF 0x06AE
#define UCB3TXBUF_L 0x06AE
#define UCB3TXBUF_H 0x06AF
#define UCB3I2COA 0x06B0
#define UCB3I2COA_L 0x06B0
#define UCB3I2COA_H 0x06B1
#define UCB3I2CSA 0x06B2
#define UCB3I2CSA_L 0x06B2
#define UCB3I2CSA_H 0x06B3
#define UCB3IE_ 0x06BC
#define UCB3IE_L_ 0x06BC
#define UCB3IE_H_ 0x06BD
#define UCB3IFG_ 0x06BD
#define UCB3IFG_L 0x06BD
#define UCB3IFG_H 0x06BE
#define UCB3IV_ 0x06BE
#define UCB3IV_L_ 0x06BE
#define UCB3IV_H_ 0x06BF
*/ <!!!!!!!!!!!!!!!! comment end
#endif /* __MSP430_HAS_USCI3_5__ */

#endif

Прогресс прогрессирует?

Указал на пример комментариев в файле.

Цитата(Сергей Борщ @ Nov 6 2009, 16:09) *
P.S. Вы так настойчиво ждете каких-то дополнений в этом файле, что можно было уже 10 раз написать их самостоятельно, оттестировать и послать патч Крису.
P.P.S. В списке рассылки проскакивала информация, что репозиторий будут перетаскивать под bazaar. Чем закончилось - не знаю.

Когда (?) будет время, то хочу попробовать собрать для MSP-EXP430F5438 демонстрационный пример, скорректировав исходный код IAR (CCE). Для этого надо иметь _полный_ комплект описаний регистров в заголовочных файлах.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 6 2009, 15:10
Сообщение #15


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(mdmitry @ Nov 6 2009, 15:56) *
Для этого надо иметь _полный_ комплект описаний регистров в заголовочных файлах.
Так возьмите и допишите. Это не архисложная задача - читать даташит и вписывать из него #define, она не требует знания потрохов компилятора. А чтобы другие не изобретали велосипед - поделитесь результатом своих трудов.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Nov 6 2009, 15:46
Сообщение #16


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Сергей Борщ @ Nov 6 2009, 18:10) *
Так возьмите и допишите. Это не архисложная задача - читать даташит и вписывать из него #define, она не требует знания потрохов компилятора. А чтобы другие не изобретали велосипед - поделитесь результатом своих трудов.

Есть один момент, который сильно смущает. Насколько я представляю, в gcc принята некоторая система в организации заголовочных файлов, связанных с функциональными модулями (usart и другие). Для конкретного контроллера заголовочных файлов несколько и они связаны между собой через определения доступной периферии. Имеется прецедент в виде файла gpio_5xxx.h специально для этой серии. На мой взгляд и остальная периферия получается в этом же виде (отдельные файлы hardmodulname_54xxx.h). НО это есть отклонение от изначальной системы, похоже на латание дыр для совместимости с предыдущими семействами.
Поправьте в чем не прав.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 6 2009, 16:45
Сообщение #17


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(mdmitry @ Nov 6 2009, 17:46) *
Имеется прецедент в виде файла gpio_5xxx.h специально для этой серии. На мой взгляд и остальная периферия получается в этом же виде (отдельные файлы hardmodulname_54xxx.h).
Ну usi.h и usci.h ведь не смущают - разная периферия, разные файлы. Периферия семейства 5xxx настолько существенно отличается от предыдущих семейств, что мне показалось логичным вынести ее в отдельный файл. Может название не совсем уданое, но ничего лучше в голову не пришло.
Цитата(mdmitry @ Nov 6 2009, 17:46) *
похоже на латание дыр для совместимости с предыдущими семействами.
Есть предложения как улучшить - пишите в список рассылки, там последний год оживление наблюдается.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Nov 6 2009, 17:25
Сообщение #18


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Сергей Борщ @ Nov 6 2009, 19:45) *
Ну usi.h и usci.h ведь не смущают - разная периферия, разные файлы. Периферия семейства 5xxx настолько существенно отличается от предыдущих семейств, что мне показалось логичным вынести ее в отдельный файл. Может название не совсем уданое, но ничего лучше в голову не пришло.Есть предложения как улучшить - пишите в список рассылки, там последний год оживление наблюдается.

Смущает то, что напрашивается usi_54xx.h и т.д.
ВСЁ для этого семейства специфично и плохо стыкуется с имеющейся структурой файлов. Получается, что проект с другого контроллера нельзя практически перевести на это семейство, сменив только тип контроллера в makefile (расширенная периферия для совместимости предположительно не используется). Потребуется имена включаемых файлов изменять. Если такую переносимость во внимание не принимать, то всё годится.
hardmodulename_54xx.h вполне понятное название.
Предложений по улучшению, к сожалению, нет, одни сомнения.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 6 2009, 18:03
Сообщение #19


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(mdmitry @ Nov 6 2009, 19:25) *
Получается, что проект с другого контроллера нельзя практически перевести на это семейство, сменив только тип контроллера в makefile (расширенная периферия для совместимости предположительно не используется). Потребуется имена включаемых файлов изменять.
Ой!
В проект включается только io.h. Из него, в зависимости от ключа -mmcu, автоматически включается нужный msp430fxxx.h, а уже из него тоже автоматически все необходимые файлы периферии.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Nov 6 2009, 21:25
Сообщение #20


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Сергей Борщ @ Nov 6 2009, 21:03) *
В проект включается только io.h. Из него, в зависимости от ключа -mmcu, автоматически включается нужный msp430fxxx.h, а уже из него тоже автоматически все необходимые файлы периферии.

?????
io.h -> msp430x54xx.h ->iomacros.h ->sys/inttypes.h
msp430/wdt_a.h
msp430/sys.h
msp430/gpio_5xxx.h
msp430/mpy32.h
msp430/timera.h
msp430/unified_clock_system.h
msp430/usci.h

msp430/timerb.h не включен
Если оставаться в этой системе для заголовочных файлов, то в соответствующие файлы необходимо внести дополнения.
В примерах включен не только io.h.

В winavr точно приходилось подключать несколько файлов.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 7 2009, 07:45
Сообщение #21


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(mdmitry @ Nov 6 2009, 23:25) *
msp430/timerb.h не включен

Если оставаться в этой системе для заголовочных файлов, то в соответствующие файлы необходимо внести дополнения.
Вот потому timerb.h и не включен, что дополнения в него еще не внесены. То есть явно видно - timerb.h надо править или как минимум проверить на совместимость.
Цитата(mdmitry @ Nov 6 2009, 23:25) *
В примерах включен не только io.h.

В winavr точно приходилось подключать несколько файлов.
Открыл наугад 10 примеров. Во всех включен только io.h. В WinAVR для подключения описания периферии достаточно подключить только io.h. В документации на avr-libc это единственный рекомендуемый способ подключения описания периферии.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Nov 7 2009, 14:08
Сообщение #22


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(Сергей Борщ @ Nov 7 2009, 10:45) *
В WinAVR для подключения описания периферии достаточно подключить только io.h.

Именно описания периферии, но не ей же единой. Хочется использовать вс,что есть (таймеры, сторожевой и т.д.).
Если говороить только о доступе к периферии, то io.h и полностью согласен с Вами.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 7 2009, 18:33
Сообщение #23


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(mdmitry @ Nov 7 2009, 16:08) *
Хочется использовать вс,что есть (таймеры, сторожевой и т.д.).
То есть функции более высокого уровня (вроде wdt_reset()), уже написанные кем-то? Ну так их тоже можно дополнить до поддержки 5xxx.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 21 2010, 11:41
Сообщение #24


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Таки попробовал...
Компилятор что-то компилит.
А вот потом начинаются чудеса:
CODE
C:\mspgcc4\bin\msp430-gcc ./Obj/main.o ./Obj/process_MB.o ./Obj/measure.o
./Obj/temperature.o ./Obj/utils.o ./Obj/TimerB.o ./Obj/flash.o ./Obj/gen.o ./Obj/AD7708.o
./Obj/mb.o ./Obj/mbcrc.o ./Obj/mbrtu.o ./Obj/portevent.o ./Obj/portserial.o ./Obj/porttimer.o
./Obj/mbfunccoils.o ./Obj/mbfuncdiag.o ./Obj/mbfuncdisc.o ./Obj/mbfuncholding.o ./Obj/mbfuncinput.o
./Obj/mbfuncother.o ./Obj/mbutils.o ./Obj/dco.o
-mmcu=msp430x149 -Wl,--section-start -Wl,.seg_a=0x1080 -Wl,--gc-sections
-Wl,-Map=9010U.map,--cref -LC:\mspgcc4"\bin\lib" -LC:\mspgcc4"\msp430\lib"
-LC:\mspgcc4"\msp430\include" -LC:\mspgcc4"\msp430\include\msp430" -Wl,-relax -lc -lm -o 9010U.elf
./Obj/mb.o: In function `abs':
mb.c:(.text.abs+0x0): multiple definition of `abs'
./Obj/TimerB.o:TimerB.c:(.text.abs+0x0): first defined here
c:\mspgcc4\bin\msp430-ld.exe: Disabling relaxation: it will not work with multiple definitions
./Obj/mb.o: In function `labs':
mb.c:(.text.labs+0x0): multiple definition of `labs'
./Obj/TimerB.o:TimerB.c:(.text.labs+0x0): first defined here
./Obj/mbrtu.o: In function `abs':
mbrtu.c:(.text.abs+0x0): multiple definition of `abs'
./Obj/TimerB.o:TimerB.c:(.text.abs+0x0): first defined here
./Obj/mbrtu.o: In function `labs':
mbrtu.c:(.text.labs+0x0): multiple definition of `labs'
./Obj/TimerB.o:TimerB.c:(.text.labs+0x0): first defined here
./Obj/mbfunccoils.o: In function `abs':
mbfunccoils.c:(.text.abs+0x0): multiple definition of `abs'
./Obj/TimerB.o:TimerB.c:(.text.abs+0x0): first defined here
./Obj/mbfunccoils.o: In function `labs':
mbfunccoils.c:(.text.labs+0x0): multiple definition of `labs'
./Obj/TimerB.o:TimerB.c:(.text.labs+0x0): first defined here
./Obj/mbfuncdisc.o: In function `abs':
mbfuncdisc.c:(.text.abs+0x0): multiple definition of `abs'
./Obj/TimerB.o:TimerB.c:(.text.abs+0x0): first defined here
./Obj/mbfuncdisc.o: In function `labs':
mbfuncdisc.c:(.text.labs+0x0): multiple definition of `labs'
./Obj
/TimerB.o:TimerB.c:(.text.labs+0x0): first defined here
./Obj/mbfuncholding.o: In function `abs':
mbfuncholding.c:(.text.abs+0x0): multiple definition of `abs'
./Obj/TimerB.o:TimerB.c:(.text.abs+0x0): first defined here
./Obj/mbfuncholding.o: In function `labs':
mbfuncholding.c:(.text.labs+0x0): multiple definition of `labs'
./Obj/TimerB.o:TimerB.c:(.text.labs+0x0): first defined here
./Obj/mbfuncinput.o: In function `abs':
mbfuncinput.c:(.text.abs+0x0): multiple definition of `abs'
./Obj/TimerB.o:TimerB.c:(.text.abs+0x0): first defined here
./Obj/mbfuncinput.o: In function `labs':
mbfuncinput.c:(.text.labs+0x0): multiple definition of `labs'
./Obj/TimerB.o:TimerB.c:(.text.labs+0x0): first defined here
./Obj/mbfuncother.o: In function `abs':
mbfuncother.c:(.text.abs+0x0): multiple definition of `abs'
./Obj/TimerB.o:TimerB.c:(.text.abs+0x0): first defined here
./Obj/mbfuncother.o: In function `labs':
mbfuncother.c:(.text.labs+0x0): multiple definition of `labs'
./Obj/TimerB.o:TimerB.c:(.text.labs+0x0): first defined here
./Obj/mbutils.o: In function `abs':
mbutils.c:(.text.abs+0x0): multiple definition of `abs'
./Obj/TimerB.o:TimerB.c:(.text.abs+0x0): first defined here
./Obj/mbutils.o: In function `labs':
mbutils.c:(.text.labs+0x0): multiple definition of `labs'
./Obj/TimerB.o:TimerB.c:(.text.labs+0x0): first defined here
collect2: ld returned 1 exit status
mingw32-make.exe: *** [9010U.elf] Error 1
Process terminated with status 2 (0 minutes, 21 seconds)

А вот листинг и мап:
Прикрепленный файл  9010U.zip ( 52.01 килобайт ) Кол-во скачиваний: 82

что за abs и labs - в упор не понимаю...
-fwhole-program вроде работает, но требует, чтобы компилятору скармливались все файла зараз, иначе потом линкер концов не находит.

Короче, с ходу не взлетел sad.gif
Со старым всё компилится нормально


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 21 2010, 13:06
Сообщение #25


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Нашёл предварительно, где копать:
stdlib.h:

Код
extern __inline__ int abs(int __x) __ATTR_CONST__;
extern __inline__ int abs(int __x)
{
    return (__x < 0)  ?  -__x  :  __x;
}
        
extern __inline__ long labs(long __x) __ATTR_CONST__;
extern __inline__ long labs(long __x)
{
    return (__x < 0)  ?  -__x  :  __x;
}


Ну и каким местом он влезает во все модули, где есть stdlib.h ?
Посмотрел, в старой версии этот файл один-в-один

Таки победил smile.gif
Пришлось extern __inline__ заменить на static __inline__
Цитата
Build project 9010U - OK.
text data bss dec hex filename
20191 72 742 21005 520d 9010U.elf
msp430-gcc (MSPGCC4_r4-20100210) 4.4.3
Copyright © 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Ну ничего себе "Better optimization. The generated code is typically 7%-10% smaller than code generated by MSPGCC-3.2.3"
- 20k против 12 от предыдущей версии!


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 21 2010, 13:14
Сообщение #26


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(MrYuran @ May 21 2010, 15:48) *
Ну и каким местом он влезает во все модули, где есть stdlib.h ?
Посмотрел, в старой версии этот файл один-в-один
Сочетание extern и __inline__ выглядит, мягко говоря, странным. Возможно старый и новый компиляторы трактуют __inline__ по-разному или в новых заголовочниках где-нибудь стоит строка
Код
#define __inline__


Цитата(MrYuran @ May 21 2010, 16:06) *
20k против 12 от предыдущей версии!
Так там еще куча ключей должна была добавиться. Возможно с ними и получше будет. Пробуйте вот с этими поиграться:
Код
#CFLAGS += -fno-ivopts
CFLAGS += -fno-tree-scev-cprop
#CFLAGS += -fno-split-wide-types
CFLAGS += -fno-inline-small-functions
CFLAGS += -fno-inline-functions

#adjust --param inline-call-cost= to get minimal code size
CFLAGS += --param inline-call-cost=1
#CFLAGS += -fno-reorder-blocks
#CFLAGS += -fno-reorder-blocks-and-partition
#CFLAGS += -fno-reorder-functions
#CFLAGS += -fno-toplevel-reorder
CFLAGS += -fno-move-loop-invariants
#CFLAGS += -fno-unroll-loops
#CFLAGS += -fno-unroll-all-loops
#CFLAGS += --param max-unroll-times=0
Очень влияет --param inline-call-cost=, причем на разных исходниках оптимум дают разные значения.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 21 2010, 13:19
Сообщение #27


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Сергей Борщ @ May 21 2010, 17:14) *
Сочетание extern и __inline__ выглядит, мягко говоря, странным.

Ну, не я ж это придумал!
За ключики спасибо, буду играться.
Предыдущий результат был с -O3.
-Os даёт 13к против 12.7к, опять не в пользу 4 версии sad.gif
Так и не понял, к какому месту DWARF2 прикручивать...
Но в целом прогресс (с прошлого года) заметен.
Даже установщик кой-какой приделали.
В файлах периферии виднеются F5xx, СС430 и G2xx

Да, и это надо ещё на железке прогнать.
Старый компилятор, хоть и не без глюков, но собирал рабочие бинарники. Этот - пока не знаю.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 21 2010, 13:22
Сообщение #28


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(MrYuran @ May 21 2010, 19:06) *
Ну ничего себе "Better optimization. The generated code is typically 7%-10% smaller than code generated by MSPGCC-3.2.3"
- 20k против 12 от предыдущей версии!

Это общая тенденция - 4й GCC генерит больший код, чем 3й. Хотя 20 против 12 - это явный перебор.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 21 2010, 13:34
Сообщение #29


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата
За ключики спасибо, буду играться.

Код
Build project 9010U - OK.
   text       data        bss        dec        hex    filename
  14413         72        742      15227       3b7b    9010U.elf

Уже лучше!
Это -O2
Код
   text       data        bss        dec        hex    filename
  13077         72        742      13891       3643    9010U.elf

-Os
Совсем тепло... biggrin.gif


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 21 2010, 14:01
Сообщение #30


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(AHTOXA @ May 21 2010, 17:22) *
Это общая тенденция - 4й GCC генерит больший код, чем 3й. Хотя 20 против 12 - это явный перебор.
Неа. Всё же со всеми новыми способами оптимизации 4й GCC получается получше 3-его.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 24 2010, 09:37
Сообщение #31


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(demiurg_spb @ May 21 2010, 18:01) *
Неа. Всё же со всеми новыми способами оптимизации 4й GCC получается получше 3-его.

Прикрутил-таки сегодня "вхоле-програм" и "комбайн". -Os
Код
Build project 9010U - OK.
   text       data        bss        dec        hex    filename
   7518          4        772       8294       2066    9010U.elf
msp430-gcc (MSPGCC4_r4-20100210) 4.4.3
Copyright (C) 2010 Free Software Foundation, Inc.

08.gif

-O3 выдал internal compiler error

-O2:
Код
   text       data        bss        dec        hex    filename
   8876          4        772       9652       25b4    9010U.elf


-O1:
Код
   text       data        bss        dec        hex    filename
   8824          4        772       9600       2580    9010U.elf


Оптимизация выключена:
Код
   text       data        bss        dec        hex    filename
  12574         72       1118      13764       35c4    9010U.elf

Практически то же самое, что 3-я версия давала с -O3
Если это ещё на железке заработает, вывод однозначный. Брать!
По оптимизации вполне сравнимо с ИАРом.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 24 2010, 10:40
Сообщение #32


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(MrYuran @ May 24 2010, 13:37) *
По оптимизации вполне сравнимо с ИАРом.
Так и о чём:-)
При таком способе оптимизации очень важно грамотно использовать volatile - и там где раньше и без него могло проканать - теперь не проканает...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 24 2010, 13:50
Сообщение #33


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(MrYuran @ May 24 2010, 15:37) *
По оптимизации вполне сравнимо с ИАРом.

Круто! Теперь будет занята четверть объёма флешаsmile.gif
Цитата(demiurg_spb @ May 24 2010, 16:40) *
При таком способе оптимизации очень важно грамотно использовать volatile - и там где раньше и без него могло проканать - теперь не проканает...

Кстати да, ждём повторного отчёта, после расстановки всех положенных volatile wink.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 25 2010, 05:43
Сообщение #34


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(AHTOXA @ May 24 2010, 17:50) *
Круто! Теперь будет занята четверть объёма флешаsmile.gif

Дело не в этом, просто всё должно быть красиво!
Ну и хочется знать хотя бы теоретический предел "сжатия".
К тому же, у меня задачи достаточно легковесные (измериловка, обработка, обмен с хостом), а вот к примеру, для автономного прибора с графическим экранчиком, кучей менюшек и даже встроенным блокнотом уже начинает играть рояль.
Причём, от оптимизации и потребление может зависеть (хотя, на фоне экранчика, жрущего как лошадь 3мА, это всё копейки...)
Или вот например, выпустили серию G2xx. Вот если бы добавили флеша хотя бы до 8кБ, то туда можно было бы упихать что-нибудь стоящее.

Попробовал вчера ещё один проект собрать, там что-то непонятное творит.
Такое ощущение, что вместо elf-а подсовывает неразлинкованный объектник.
Прикрепленный файл  1002TD.elf.lst.zip ( 32.52 килобайт ) Кол-во скачиваний: 80


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 25 2010, 09:24
Сообщение #35


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(MrYuran @ May 25 2010, 09:43) *
Такое ощущение, что вместо elf-а подсовывает неразлинкованный объектник.
Да ну... Откуда такие предположения? Вроде как при такой компиляции он объектные файлы вообще не создаёт.
У Вас в Makefile конечная цель elf или всё-таки ещё получаете hex или bin и что с ними?


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 25 2010, 09:40
Сообщение #36


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(demiurg_spb @ May 25 2010, 13:24) *
Да ну... Откуда такие предположения? Вроде как при такой компиляции он объектные файлы вообще не создаёт.
У Вас в Makefile конечная цель elf или всё-таки ещё получаете hex или bin и что с ними?

Предположения из листинга, полученного обждампом из эльфа.
Делаю так:
Код
$(NAME).elf : $(CSRC)
    @echo $^
    @$(CC) -c $(CFLAGS) -combine -fwhole-program $^ $(LDFLAGS) -o $@

Как уже писал, в предыдущем проекте всё собралось нормально.
И листинг нормальный.
CODE

Disassembly of section .text:

00001100 <__init_stack>:

1100: 31 40 00 0a mov #2560, r1 ;#0x0a00

00001104 <__low_level_init>:

1104: b2 40 80 5a mov #23168, &0x0120 ;#0x5a80
1108: 20 01

0000110a <__do_clear_bss>:
110a: 3f 40 e6 02 mov #742, r15 ;#0x02e6
110e: 0f 93 tst r15
1110: 04 24 jz $+10 ;abs 0x111a
1112: 1f 83 dec r15
1114: cf 43 48 02 mov.b #0, 584(r15);r3 As==00, 0x0248(r15)
1118: fc 23 jnz $-6 ;abs 0x1112

0000111a <__do_copy_data>:
111a: 3f 40 48 00 mov #72, r15 ;#0x0048
111e: 0f 93 tst r15
1120: 05 24 jz $+12 ;abs 0x112c
1122: 2f 83 decd r15
1124: 9f 4f 68 5a mov 23144(r15),512(r15);0x5a68(r15), 0x0200(r15)
1128: 00 02
112a: fb 23 jnz $-8 ;abs 0x1122

0000112c <__jump_to_main>:
112c: 30 40 54 22 br #0x2254

00001130 <__ctors_end>:
1130: 30 40 3e 12 br #0x123e


а вот "ненормальный":
CODE
Disassembly of section .text.GetRealTime.1824:

00000000 <GetRealTime.1824>:
0: 0b 12 push r11
2: 0b 4f mov r15, r11
4: 08 3c jmp $+18 ;abs 0x16
6: 1e 42 00 00 mov &0x0000,r14
a: 1f 42 00 00 mov &0x0000,r15
e: 8b 4e 00 00 mov r14, 0(r11) ;0x0000(r11)
12: 8b 4f 02 00 mov r15, 2(r11) ;0x0002(r11)
16: 1c 42 00 00 mov &0x0000,r12
1a: 1d 42 00 00 mov &0x0000,r13
1e: 3e 4b mov @r11+, r14
20: 3f 4b mov @r11+, r15
22: 2b 82 sub #4, r11 ;r2 As==10
24: 0c 9e cmp r14, r12
26: ef 23 jnz $-32 ;abs 0x6
28: 0d 9f cmp r15, r13
2a: ed 23 jnz $-36 ;abs 0x6
2c: 3b 41 pop r11
2e: 30 41 ret
Disassembly of section .text.Beep.1817:

00000000 <Beep.1817>:
0: 0b 12 push r11
2: 0a 12 push r10
4: 0b 4f mov r15, r11
6: 3f 40 00 00 mov #0, r15 ;#0x0000
a: b0 12 00 00 call #0x0000
e: 0c 4b mov r11, r12
10: 3a 40 05 00 mov #5, r10 ;#0x0005
14: b0 12 00 00 call #0x0000
18: 0d 43 clr r13
1a: 82 5c 00 00 add r12, &0x0000
1e: 82 6d 00 00 addc r13, &0x0000
22: e2 c3 31 00 bic.b #2, &0x0031 ;r3 As==10
26: 3a 41 pop r10
28: 3b 41 pop r11
2a: 30 41 ret


Если первый выглядит как нормальный бинарник, с конкретными абсолютными адресами, то второй - как нелинкованный выход компилятора.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 25 2010, 10:00
Сообщение #37


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Давайте посмотрим на всю стоку целиком.
Вот как у меня:
Цитата
avr-gcc -mmcu=atmega162 -MMD -MP -MF ../bin/Veha_CSH162/Veha_C_DAC_RS.dep -gdwarf-2 -DF_CPU=14745600UL -Os -pedantic -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -fno-split-wide-types --combine -fwhole-program -ffunction-sections -fdata-sections -Wl,--relax -ftree-loop-ivcanon -mcall-prologues -fno-tree-scev-cprop -finline-small-functions -fearly-inlining --param inline-call-cost=2 -finline-limit=100 -fno-unit-at-a-time -Wsign-compare -Wa,-adhlns=../bin/Veha_CSH162/Veha_C_DAC_RS.lst -std=c99 -DINTERFACE_DAC_ON -DINTERFACE_RS_ON -DBOOTLOADER_START_ADDRESS=0x3800 -DBOOTLOADER_SIZE=2048 -DLOW_LEVELX_H=low_level3.h -DDEVICE_DESCRIPTOR=0x08030003 -DPROJECT_NAME=Veha_C -DPROJECT_MAJOR_REV=1 -DPROJECT_MINOR_REV=35 -I. -I./conf -I./hal -I./ui -I./io -I./../../../arclib/avr -I./../../../arclib/ic_drivers -I./../../../arclib/common -I./../../../arclib/common/modbus ./../../../arclib/common/bin_bcd.c ./../../../arclib/avr/eeprom_sfloat.c ./../../../arclib/avr/led_keyboard.c ./../../../arclib/avr/led7.c ./ui/led_interface.c ./../../../arclib/common/keys.c ./io/di.c ./io/do.c ./hal/power_good.c ./io/counter.c ./io/cnt_logic.c ./ui/callbacks.c ./ui/edit.c ./ui/prog.c ./hal/timer.c ./../../../arclib/avr/crc16.c ./../../../arclib/avr/rs485.c ./../../../arclib/common/modbus/modbus_buffer.c ./../../../arclib/common/modbus/modbus_timer.c ./../../../arclib/common/modbus/modbus_slave_func.c ./../../../arclib/common/modbus/modbus_slave.c ./io/dac.c ./hal/init_dev.c main.c --output ../bin/Veha_CSH162/Veha_C_DAC_RS.elf -Wl,-Map=../bin/Veha_CSH162/Veha_C_DAC_RS.map,--cref -Wl,--gc-section -lm


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 25 2010, 10:23
Сообщение #38


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



А как заставить make выводить весь поток полностью?
У меня выводит только результаты


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 25 2010, 10:28
Сообщение #39


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



make -n ?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 25 2010, 10:55
Сообщение #40


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата
d:\WORK\PROJECTS\MARK-1002T\BAD-1002T\PROGRAM\1002D_05_00>mingw32-make -n all
echo main/demo.c measure/measure.c utils/utils.c timerb/TimerB.c flash/flash.c d
oser/doser.c ds2433/ds2433.c keyboard/keyboard.c heater/heater.c UART/uart.c sys
tem/dco.c indicator/indicator.c
C:\mspgcc4\bin\msp430-gcc -c -mmcu=msp430x149 -O3 -DGCC_MSP430 -Wall -Wshadow -W
pointer-arith -Wbad-function-cast -Wcast-align -Wsign-compare -Waggregate-return
-Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wunused -std=g
nu99 -fdata-sections -ffunction-sections -I./ -I./main -I./measure -I./utils -I.
/timerb -I./flash -I./doser -I./ds2433 -I./keyboard -I./heater -I./UART -I./syst
em -I./indicator -Wa,-adhlns=./Lst/demo.lst -combine -fwhole-program main/demo.c
measure/measure.c utils/utils.c timerb/TimerB.c flash/flash.c doser/doser.c ds2
433/ds2433.c keyboard/keyboard.c heater/heater.c UART/uart.c system/dco.c indica
tor/indicator.c -mmcu=msp430x149 -Wl,--section-start -Wl,.seg_a=0x1080 -Wl,--gc-
sections -Wl,-Map=1002TD.map,--cref -LC:\mspgcc4"\bin\lib" -LC:\mspgcc4"\msp430\
lib" -LC:\mspgcc4"\msp430\include" -LC:\mspgcc4"\msp430\include\msp430" -Wl,-rel
ax -lc -lm -o 1002TD.elf
echo Build project 1002TD - OK.
C:\mspgcc4\bin\msp430-size -B 1002TD.elf
C:\mspgcc4\bin\msp430-gcc --version


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение May 25 2010, 11:33
Сообщение #41


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(MrYuran @ May 25 2010, 14:23) *
А как заставить make выводить весь поток полностью?
У меня выводит только результаты

Цитата(AHTOXA @ May 25 2010, 14:28) *
make -n ?

Или возможно убрать собаку из начала этой строчки.
Цитата(MrYuran @ May 25 2010, 13:40) *
Код
    @$(CC) -c $(CFLAGS) -combine -fwhole-program $^ $(LDFLAGS) -o $@


А так ничего страшного не вижу. Странно...

Единственное, проще включить опцию -pedantic и стандарт С99 вместо gnu99,
тогда не нужно будет столько много ключей про варнинги (-Wmissing-prototypes -Wmissing-declarations...)

Ещё посмотрите на это:
-Wl,--relax
-ftree-loop-ivcanon
-mcall-prologues
-fno-tree-scev-cprop
-finline-small-functions
-fearly-inlining
--param inline-call-cost=2
-finline-limit=100
-fno-unit-at-a-time

И вообще с оптимизацией -Os всегда получаются самые лучшие результаты (разницы по скорости с -O3 реально фактически нет).


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 25 2010, 12:06
Сообщение #42


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Короче, я понял.
Он все секции мапит на 0x0000, в результате итоговый размер определяется самой длинной секцией.
Глюк в чистом виде.
фтопку...

Хотя нет... Достаём обратно...
Код
$(NAME).elf : $(CSRC)
    @echo $^
    @$(CC) -c $(CFLAGS) $^ $(LDFLAGS) -o $(NAME).o
    $(CC) $(NAME).o $(LDFLAGS) -o $@
    $(OBJCOPY) -O ihex $(NAME).elf $(NAME).a43

Как я и думал, это был объектник, который надо ещё слинковать laughing.gif
За один проход никак...

Код
   text       data        bss        dec        hex    filename
  23004          2        257      23263       5adf    1002TD.elf

Вот это похоже на правду.

А вот это без -combine и -fwhole-program:
Код
   text       data        bss        dec        hex    filename
  26954          2        302      27258       6a7a    1002TD.elf

Разница, конечно, есть, но не такая сказочная.
На -Os - вообще 22кБ против 23


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jun 11 2010, 13:29
Сообщение #43


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Противоречивые какие-то чувства навевает...
Поигрался сегодня вдоволь.
Обнаружил странный глюк: (а может, так и должно быть?)
если объявить interrupt функцию как static inline, то она не линкуется, а вместо неё в таблицу векторов забивается _unexpected_
Причём, даже отдельно static или inline тоже вызывают подобный глюк.
В старой версии некоторые комбинации проходят.
Кстати, ключ "вхоле_програм" вызывает подобный глюк при любом раскладе.

Размер таки 4 версия компилит бОльший, чем предыдущая. С 20кБ около 2-х набегает, а вот с 50 - уже все 5, и можно случайно не влезть во флешь со старым проектом...

В поисках флагов для "полновесного" sprintf() наткнулся на вот что:
http://mspgcc.bzr.sf.net/bzr/mspgcc/mspgcc-core/changes
Оказывается, исходный mspgcc жив!
Осталось таки научиться его собирать...


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 13 2010, 11:08
Сообщение #44


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(MrYuran @ Jun 11 2010, 17:29) *
если объявить interrupt функцию как static inline
Этого делать не надо т.к. при архитектуре mcu с таблицей векторов прерываний невозможно в принципе инлайнить обработчики прерываний.

Цитата(MrYuran @ Jun 11 2010, 17:29) *
Причём, даже отдельно static или inline тоже вызывают подобный глюк.
со static - это действительно бага.

Цитата
Кстати, ключ "вхоле_програм" вызывает подобный глюк при любом раскладе.
Не бейте пианиста он играет как умеетsmile.gif


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jun 17 2010, 07:31
Сообщение #45


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



ААААААААААААААААААААААААААААААА!!!!!!
smile3046.gif
twak.gif
maniac.gif
Нашел причину всех моих неудач за последний месяц!
Идея была в том, чтобы написать культурный HAL на основе mspgcc-шного iostructures.h
И что я сегодня заметил?!
Код
static  void ClearWatchDog(void)
{
    SYS_WDT.out.SYS_WDT_PIN = 1;
    5300:    b2 d0 80 00     bis    #128,    &0x001e;#0x0080
    5304:    1e 00
/main/../platform/watchdog_lo_level.h:27
    SYS_WDT.out.SYS_WDT_PIN = 0;
    5306:    b2 f0 7f ff     and    #-129,    &0x001e;#0xff7f
    530a:    1e 00

SYS_WDT - это port4:
#if defined(__MSP430_HAS_PORT4__) || defined(__MSP430_HAS_PORT4_R__)
__MSP430_EXTERN__ struct port_simple_t port4 asm("0x001c");
#endif
, где
Код
struct port_simple_t {
  ioregister_t    in;     /* Input */ ->1c
  ioregister_t    out;    /* Output */ ->1d
[b] ioregister_t    dir;    /* Direction */ ->1e[/b]
  ioregister_t    sel;    /* Selection */
};

Ну и каких, собственно, аллюзий out стал по адресу 1e?
То есть всё как бы съехало на 1 адрес, и я вместо того чтобы махнуть ногой, переключаю направление...
После такого стресса перестаёшь верить в разумное и доброе, хочется выдернуть шнур и выдавить стекло.
И в отпуск на полгода...

Ну а это уже ни в какие рамки:
Код
static  void WatchDogInit(void)
{
    SYS_WDT.out.SYS_WDT_PIN = 0;
    44e8:    3f 40 1e 00     mov    #30,    r15;#0x001e
    44ec:    bf f0 7f ff     and    #-129,    0(r15);#0xff7f, 0x0000(r15)
    44f0:    00 00
/main/../platform/watchdog_lo_level.h:16
    SYS_WDT.sel.SYS_WDT_PIN = 0;
    44f2:    bf f0 7f ff     and    #-129,    4(r15);#0xff7f, 0x0004(r15)
    44f6:    04 00
/main/../platform/watchdog_lo_level.h:17
    SYS_WDT.dir.SYS_WDT_PIN = 1;
    44f8:    bf d0 80 00     bis    #128,    2(r15);#0x0080, 0x0002(r15)
    44fc:    02 00

Поля структуры просто перетасованы в каком-то непонятном порядке... и всё сдвинуто

Но ведь работало же как-то раньше!

Кажись допёр... Структуры должны быть packed sad.gif
Может есть такой ключик, чтобы все структуры упаковать?
А то по одной долго возиться, да и править системные исходники не совсем идеологически правильно

######
__attribute__ ((packed)) не помог...
все регистры по 2 байта.
Со старым компилятором то же самое.
Что за жизнь пошла...


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jun 17 2010, 08:45
Сообщение #46


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Вот кстати интересно:
Кто структуры пакует - компилятор или линкер?
В смысле - кто виноват?
И что делать?

Так и придётся, видимо, как встарь - макросы, битовые масочки... Тупо, зато работает


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Jun 17 2010, 09:25
Сообщение #47


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Про упаковку всех структур:
Код
CFLAGS += -fpack-struct

Про перетасовку, возможно, что-то из этого (некогда сейчас вникать):
Код
CFLAGS += -fno-reorder-blocks
CFLAGS += -fno-reorder-blocks-and-partition
CFLAGS += -fno-reorder-functions
CFLAGS += -fno-toplevel-reorder

Цитата(MrYuran @ Jun 17 2010, 12:45) *
Вот кстати интересно:
Кто структуры пакует - компилятор или линкер?
Думается, что компилятор.
Линкер лишь связывает.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jun 17 2010, 09:31
Сообщение #48


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(demiurg_spb @ Jun 17 2010, 13:25) *
CFLAGS += -fpack-struct
CFLAGS += -fno-reorder-blocks
CFLAGS += -fno-reorder-blocks-and-partition

Ура, заработало!
Вотжеж, засады поджидают на каждом шагу на пути к культуре...
А я уж было на плюсы намылился, чтобы, как АНТОХА, писать WatchDog->Clear(); biggrin.gif
Код
    Myport4.in.pin4 = 1;
    5178:    f2 d0 10 00     bis.b    #16,    &0x001c;#0x0010
    517c:    1c 00
D:\ex_work\work\Программы\1003D_430_01_00\NEW_DOSER/main/../platform/watchdog_lo_level.h:31
    Myport4.out.pin4 = 1;
    517e:    f2 d0 10 00     bis.b    #16,    &0x001d;#0x0010
    5182:    1d 00
D:\ex_work\work\Программы\1003D_430_01_00\NEW_DOSER/main/../platform/watchdog_lo_level.h:32
    Myport4.dir.pin4 = 1;
    5184:    f2 d0 10 00     bis.b    #16,    &0x001e;#0x0010
    5188:    1e 00
D:\ex_work\work\Программы\1003D_430_01_00\NEW_DOSER/main/../platform/watchdog_lo_level.h:33
    Myport4.sel.pin4 = 1;
    518a:    f2 d0 10 00     bis.b    #16,    &0x001f;#0x0010
    518e:    1f 00


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jun 17 2010, 12:34
Сообщение #49


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(MrYuran @ Jun 17 2010, 12:31) *
Ура, заработало!
При этом все структуры стали упакованными. С вытекающими тормозами там, где не нужно. Давным-давно была бага с невыровненным доступом, я ее исправлял. В mspgcc3. Не было никаких проблем с доступом к портам. Скорее собака зарыта в описании структур. Как объявлен ioregister_t? Судя по пословному доступу в первом примере - он объявлен как двухбайтовый. И, соответственно, выровнен. С упаковкой при помощи __attribute__((packed)) тоже никаких проблем. У меня сейчас mspgcc не стоит, но если есть желание разобраться - могу поставить.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jun 17 2010, 15:49
Сообщение #50


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(Сергей Борщ @ Jun 17 2010, 16:34) *
С упаковкой при помощи __attribute__((packed)) тоже никаких проблем.

Вот и у меня не было, как говорится, пришла беда, откуда не ждали.
Причём пробовал и старую версию (в мэйкфайле меняю MSPGCC_ROOT c С:\mspgcc4 на C:\mspgcc) - то же самое.
Причём раньше-то точно работало. В нескольких проектах.
После этого, правда, пару раз систему переставляли, может чего упустили...
А сегодня, в разгар разборок, вообще винчестер сдох. Не выдержал...

Видимо, таки придётся учиться собирать из исходников.
на bzr, я так понял, готовых сборок не выкладывают


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Jul 6 2010, 06:41
Сообщение #51


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Перекомпилил старый ИАРовский прожект, который раньше был меньше 20к.
Результат - больше 30...
cranky.gif
манипуляции с ключами пока особого эффекта не дают (наверно, не знаю нужную комбинацию)
В конце концов, полфлэша свободно, так что пока не жмёт.
А вот если бы пришлось утаптывать в Fx47, то критично..


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 5 2012, 06:16
Сообщение #52


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



В последнее время проект реанимирован, произошло (насколько я понял) слияние старой ветки GCC 3 с новаторской 4-й, обновили страничку на sf.net, прибрались порядочно.
К сожалению, выкинули python-овские тулзы, и даже файл ihex2txt.exe, преобразующий ihex понятно во что.
io.h теперь deprecated, равно как signal.h
Цитата
c:\mspgcc_new\bin\..\lib\gcc\msp430\4.5.3\..\..\..\..\msp430\include\signal.h|43|warning: #warning msp430-libc <signal.h> deprecated, using <legacymsp430.h>|
c:\mspgcc_new\bin\..\lib\gcc\msp430\4.5.3\..\..\..\..\msp430\include\io.h|1|warning: #warning <io.h> is deprecated, please include <msp430.h>|


Автоматом редирект на новые с предупреждением.
Прогнал старый проект, выловил кучу фатальных ошибок, которые раньше пролетали даже без предупреждений.
Результат:
Код
text       data        bss        dec        hex    filename
  27832         24       1040      28896       70e0    xxx.elf
msp430-gcc (GCC) 4.5.3


Было:
Код
text       data        bss        dec        hex    filename
  29076         40       1016      30132       75b4    xxx.elf
msp430-gcc (GCC) 3.2.3

Оптимизация -Os

Минус кило двести даже при прочих равных. А ведь можно и потоньше настроить.

В целом очень рад, что проект получил новое развитие. Хотя в перспективе можем от msp430 отказаться в пользу новых Cortex M0/M3


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 5 2012, 07:40
Сообщение #53


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Попробовал дополнительные ключики
Цитата
CFLAGS += -combine
CFLAGS += -fwhole-program


:

Код
text       data        bss        dec        hex    filename
  26870         24       1031      27925       6d15    xxx.elf


Ещё минус кило.
Итого, минус 2200 с 29000.
-7,59%

А ведь один проект недавно совсем чуть-чуть в 60к не влез, пришлось ИАР эксплуатировать, в порядке исключения.
А теперь бы не пришлось.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 5 2012, 07:59
Сообщение #54


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Это про какой mspgcc? Про просто mspgcc или про mspgcc4? Второй вроде уже не суппортед давно.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 5 2012, 08:21
Сообщение #55


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(AHTOXA @ Apr 5 2012, 11:59) *
Это про какой mspgcc? Про просто mspgcc или про mspgcc4?

Это про просто mspgcc, который теперь 4.5.3 и к тому же
mspgcc 2012-03-31
Напомню, крайний официальный релиз 3-го на sf.net был где-то в районе 301208

Цитата
Uniarch continued the work of mspgcc4, returning those contributions to the mspgcc project and generalizing the infrastructure to support all 300+ variants of the MSP430 microcontroller. The name "uniarch" is no longer used: the project is again simply "mspgcc".


PS:
а я путем коммента
#CFLAGS += -fno-reorder-blocks
#CFLAGS += -fno-reorder-blocks-and-partition
ещё 128 байт отжал sm.gif
Итого, -8% ровно.

Я бы на месте TI премию выписал всем новым (и старым) энтузиастам, или хотя бы радиочасики подарил, на память sm.gif


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 5 2012, 08:32
Сообщение #56


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



А, ну с этим мы уже немножко познакомились sm.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 5 2012, 08:36
Сообщение #57


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(AHTOXA @ Apr 5 2012, 12:32) *
А, ну с этим мы уже немножко познакомились sm.gif

Там что-то все про баги, а я вот старый проект просто тупо собрал, и все работает как надо.
Более того, исчез один мелкий, но необъяснимый глюк. Просто сам по себе.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 5 2012, 10:54
Сообщение #58


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Попробовали крайнюю версию 4.6.2 - опять -combine отломали...
maniac.gif


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Apr 5 2012, 13:02
Сообщение #59


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(MrYuran @ Apr 5 2012, 14:36) *
Там что-то все про баги, а я вот старый проект просто тупо собрал, и все работает как надо.

Глюки там были при -ffunction-sections -fdata-sections + -gc-sections. Остальное нормуль вроде. Но я пока на старой версии, не хочу экспериментировать.
Цитата
Попробовали крайнюю версию 4.6.2 - опять -combine отломали...
Да это ещё нигде толком не работает, имхо. По крайней мере, закладываться на работоспособность этой фичи я бы не стал ещё год как минимум.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Apr 6 2012, 09:44
Сообщение #60


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(AHTOXA @ Apr 5 2012, 17:02) *
Глюки там были при -ffunction-sections -fdata-sections + -gc-sections. Остальное нормуль вроде. Но я пока на старой версии, не хочу экспериментировать.
Да это ещё нигде толком не работает, имхо. По крайней мере, закладываться на работоспособность этой фичи я бы не стал ещё год как минимум.

Глюков с секциями не обнаружено.
Комбайновая фича конечно необязательная, но иногда очень полезная, когда упихиваешь в прошивку последнюю сотню-другую байт.
И тут вдруг пару кБ нахаляву...


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 24 2012, 09:01
Сообщение #61


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Сегодня обнаружил эпический глюк в этой версии.
Все работает, кроме записи во флеш-память.
Скомпилировал старым добрым 3х, все работает.
Слов нет, одни эмоции.
Буду копать, конечно. Но такие вещи малость напрягают, мягко говоря.
Похоже, ошибки в h-файлах периферии, хотя вроде ти-шные там теперь, без самопала.


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
alx2
сообщение May 25 2012, 03:25
Сообщение #62


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(MrYuran @ May 24 2012, 14:01) *
Сегодня обнаружил эпический глюк в этой версии.

А почему Вы решили, что глюк именно в компиляторе?
Я неоднократно сталкивался с тем, что проекты перестают работать при смене версии gcc (2-3-4), и каждый раз причиной оказывались глюки моих программ, а не компилятора...
Если уж обвиняете компилятор - приведите исходный код, результат его компиляции и покажите, что конкретно не так...

Цитата(MrYuran @ May 24 2012, 14:01) *
Похоже, ошибки в h-файлах периферии, хотя вроде ти-шные там теперь, без самопала.

Если ошибки в сторонних файлах, то при чем тут компилятор? sm.gif

Сообщение отредактировал alx2 - May 25 2012, 03:29


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 25 2012, 05:04
Сообщение #63


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Цитата(alx2 @ May 25 2012, 07:25) *
Если ошибки в сторонних файлах, то при чем тут компилятор? sm.gif

При том, что это комплект. И он должен быть полностью рабочий.
Будет время, посмотрю, что там не так.

Код
#define __special_area__    __attribute__((section(".infomem"),used))
//#define __special_area__    __attribute__((section(".seg_a"),used))

/**
*   Хранилище данных и настроек
*/
const __special_area__ stFlashData FlashData = FACTORY_SETTINGS;

//###############################################################

static inline
void memcopy(unsigned int DstPtr[], unsigned int SrcPtr[], unsigned int NumOfWords)
{    
    while(NumOfWords--)
    {
        DstPtr[NumOfWords] = SrcPtr[NumOfWords];
    }    
}

static inline
void EraseFlash(unsigned int* segment)
{
    _DINT();
    FCTL1 = FWKEY + ERASE;                // Set Erase bit
    FCTL3 = FWKEY;                        // Clear Lock bit
    *(segment) = 0;                       // Dummy write to erase Flash segment
    FCTL1 = FWKEY;                          // Clear WRT bit
    FCTL3 = FWKEY + LOCK;                   // Reset LOCK bit
    _EINT();
}

void SaveToFlash(unsigned int *DstPtr, unsigned int *SrcPtr, unsigned int NumOfWords)
{
    _DINT();
        FCTL3 = FWKEY;                        // Clear Lock bit
        FCTL1 = FWKEY + WRT;                  // Set WRT bit for write operation
        memcopy(DstPtr, SrcPtr, NumOfWords);
        FCTL1 = FWKEY;                          // Clear WRT bit
        FCTL3 = FWKEY + LOCK;                   // Reset LOCK bit
    _EINT();
}


Код
void SaveParamsToFlash(void)
{
//    LightsOn(low_a);
    static stFlashData tempFlashData;
    tempFlashData = FlashData;

    tempFlashData.Mode = Mode & 0x07;
    tempFlashData.Mode |= Work;             // костыль
    tempFlashData.Reagent = Doser.Reagent;
    tempFlashData.Xust[tempFlashData.Reagent] = Doser.Xust;

    EraseFlash((unsigned int*)&FlashData);
    SaveToFlash((unsigned int*)&FlashData, (unsigned int*)&tempFlashData, (sizeof(FlashData)+1)/2);

}


Функция гарантированно запускается в нужные моменты (подсвечивал светодиодиком), в листинге все присутствует и на первый взгляд вполне корректно, с точностью до конкретных адресов и констант. Но запись в флеш не производится. То есть, гарантированно не запускается контроллер записи в флеш, поскольку отсутствует задержка исполнения (обычно заметно "на глаз").

Учитывая, что изъян в единичном экземпляре, склоняюсь к косяку в <msp430f149.h>


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 25 2012, 06:27
Сообщение #64


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Давно не работаю с MSP, но при беглом просмотре бросилось в глаза: В EraseFlash вы сначала выставляете ERASE а потом снимаете LOCK, а в SaveToFlash наоборот - сначала снимаете LOCK а потом выставляете WRT. Это не может быть причиной? Хотя, если раньше работало... По документации порядок явно не оговаривается. Короче - кажите листинг.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
MrYuran
сообщение May 25 2012, 08:05
Сообщение #65


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Вот листинг старой версии (трэш и угар sm.gif но работает)
CODE
void SaveToFlash(unsigned int *DstPtr, unsigned int *SrcPtr, unsigned int NumOfWords)
{
3ef0: 0b 12 push r11
3ef2: 0b 4f mov r15, r11
3ef4: 0c 4e mov r14, r12
D:\work\PROJECTS\..\1002DT_430_01_00/flash/flash.c:42
_DINT();
3ef6: 32 c2 dint
D:\work\PROJECTS\..\1002DT_430_01_00/flash/flash.c:43
FCTL3 = FWKEY; // Clear Lock bit
3ef8: b2 40 00 a5 mov #-23296,&0x012c ;#0xa500
3efc: 2c 01
D:\work\PROJECTS\..\1002DT_430_01_00/flash/flash.c:44
FCTL1 = FWKEY + WRT; // Set WRT bit for write operation
3efe: b2 40 40 a5 mov #-23232,&0x0128 ;#0xa540
3f02: 28 01
memcopy():
D:\work\PROJECTS\..\1002DT_430_01_00/flash/flash.c:22
//###############################################################

static inline
void memcopy(unsigned int DstPtr[], unsigned int SrcPtr[], unsigned int NumOfWords)
{
while(NumOfWords--)
3f04: 3d 53 add #-1, r13 ;r3 As==11
3f06: 3d 93 cmp #-1, r13 ;r3 As==11
3f08: 0a 24 jz $+22 ;abs 0x3f1e
D:\work\PROJECTS\..\1002DT_430_01_00/flash/flash.c:24
{
DstPtr[NumOfWords] = SrcPtr[NumOfWords];
3f0a: 0f 4d mov r13, r15
3f0c: 0f 5f rla r15
3f0e: 0e 4f mov r15, r14
3f10: 0e 5b add r11, r14
3f12: 0f 5c add r12, r15
3f14: ae 4f 00 00 mov @r15, 0(r14) ;0x0000(r14)
3f18: 3d 53 add #-1, r13 ;r3 As==11
3f1a: 3d 93 cmp #-1, r13 ;r3 As==11
3f1c: f6 23 jnz $-18 ;abs 0x3f0a
SaveToFlash():
D:\work\PROJECTS\..\1002DT_430_01_00/flash/flash.c:46
{
_DINT();
FCTL3 = FWKEY; // Clear Lock bit
FCTL1 = FWKEY + WRT; // Set WRT bit for write operation
memcopy(DstPtr, SrcPtr, NumOfWords);
FCTL1 = FWKEY; // Clear WRT bit
3f1e: b2 40 00 a5 mov #-23296,&0x0128 ;#0xa500
3f22: 28 01
D:\work\PROJECTS\..\1002DT_430_01_00/flash/flash.c:47
FCTL3 = FWKEY + LOCK; // Reset LOCK bit
3f24: b2 40 10 a5 mov #-23280,&0x012c ;#0xa510
3f28: 2c 01
D:\work\PROJECTS\..\1002DT_430_01_00/flash/flash.c:48
_EINT();
3f2a: 32 d2 eint
D:\work\PROJECTS\..\1002DT_430_01_00/flash/flash.c:49
}
3f2c: 3b 41 pop r11
3f2e: 30 41 ret


А вот новая.
Код
000042d6 <SaveToFlash>:
SaveToFlash():
    42d6:    0b 12           push    r11        
    42d8:    0a 12           push    r10        
    42da:    32 c2           dint            
    42dc:    03 43           nop            
    42de:    b2 40 00 a5     mov    #-23296,&0x012c;#0xa500
    42e2:    2c 01
    42e4:    b2 40 40 a5     mov    #-23232,&0x0128;#0xa540
    42e8:    28 01
    42ea:    0c 43           clr    r12        
    42ec:    0b 4d           mov    r13,    r11    
    42ee:    0b 5b           rla    r11        
    42f0:    0f 5b           add    r11,    r15    
    42f2:    0e 5b           add    r11,    r14    
    42f4:    07 3c           jmp    $+16     ;abs 0x4304
    42f6:    3d 53           add    #-1,    r13;r3 As==11
    42f8:    0b 4f           mov    r15,    r11    
    42fa:    0b 5c           add    r12,    r11    
    42fc:    0a 4e           mov    r14,    r10    
    42fe:    0a 5c           add    r12,    r10    
    4300:    ab 4a 00 00     mov    @r10,    0(r11);0x0000(r11)
    4304:    2c 83           decd    r12        
    4306:    0d 93           tst    r13        
    4308:    f6 23           jnz    $-18     ;abs 0x42f6
    430a:    b2 40 00 a5     mov    #-23296,&0x0128;#0xa500
    430e:    28 01
    4310:    b2 40 10 a5     mov    #-23280,&0x012c;#0xa510
    4314:    2c 01
    4316:    32 d2           eint            
    4318:    3a 41           pop    r10        
    431a:    3b 41           pop    r11        
    431c:    30 41           ret



Немного переделал (заинлайнил erase и save внутри вызывающей функции). Чтобы все на виду. Такой вариант тоже не работал.
Код
    4330:    32 c2           dint            
    4332:    03 43           nop            
    4334:    b2 40 02 a5     mov    #-23294,&0x0128;#0xa502
    4338:    28 01
    433a:    b2 40 00 a5     mov    #-23296,&0x012c;#0xa500
    433e:    2c 01
    4340:    3f 40 00 10     mov    #4096,    r15;#0x1000
    4344:    b2 40 00 a5     mov    #-23296,&0x0128;#0xa500
    4348:    28 01
    434a:    b2 40 10 a5     mov    #-23280,&0x012c;#0xa510
    434e:    2c 01
    4350:    32 d2           eint            
    4352:    32 c2           dint            
    4354:    03 43           nop            
    4356:    b2 40 00 a5     mov    #-23296,&0x012c;#0xa500
    435a:    2c 01
    435c:    b2 40 40 a5     mov    #-23232,&0x0128;#0xa540
    4360:    28 01
    4362:    af 4b 00 00     mov    @r11,    0(r15);0x0000(r15)
    4366:    af 4a 02 00     mov    @r10,    2(r15);0x0002(r15)
    436a:    af 4c 04 00     mov    @r12,    4(r15);0x0004(r15)
    436e:    af 4d 06 00     mov    @r13,    6(r15);0x0006(r15)
    4372:    af 4e 08 00     mov    @r14,    8(r15);0x0008(r15)
    4376:    b2 40 00 a5     mov    #-23296,&0x0128;#0xa500
    437a:    28 01
    437c:    b2 40 10 a5     mov    #-23280,&0x012c;#0xa510
    4380:    2c 01
    4382:    32 d2           eint


Сразу раскрутился цикл sm.gif

Лично я никакого криминала не нашел.
Есть ещё последний вариант с тактированием флеш-контроллера.

Код
BCSCTL2 = (DIVS)|(DIVM_0)|(SELM_0)|(SELS);    // SMCLK=XT2CLK, DIVS=1, DIVM=1, MCLK=DCOCLC

    117c:    f2 40 0a 00     mov.b    #10,    &0x0058;#0x000a
    1180:    58 00

FCTL2 = FWKEY | FSSEL_1 | FN3 | FN2 | FN1;  // MCLK/14 for Flash Timing Generator
    1182:    b2 40 4e a5     mov    #-23218,&0x012a;#0xa54e
    1186:    2a 01


Нет, все совпадает... Чудеса, однако.

Попутно ещё один небольшой глючок:
Цитата
msp430-objdump -dStl .\exe\1002TD_430_01_00.elf > .\exe\1002TD_430_01_00.lst
BFD: Dwarf Error: mangled line number section.
BFD: Dwarf Error: mangled line number section.
BFD: Dwarf Error: mangled line number section.
BFD: Dwarf Error: mangled line number section.
...

Отсюда и отсутствие исходного текста в новых листингах


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение May 25 2012, 08:59
Сообщение #66


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (MrYuran @ May 25 2012, 11:05) *
Попутно ещё один небольшой глючок:
Пишите заявку в багтрекер. Питер довольно часто выпускает исправления.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
alx2
сообщение May 28 2012, 05:07
Сообщение #67


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(MrYuran @ May 25 2012, 10:04) *
При том, что это комплект. И он должен быть полностью рабочий.
.....
Учитывая, что изъян в единичном экземпляре, склоняюсь к косяку в <msp430f149.h>

Вы совершенно правы насчет того, что комплект должен быть рабочим.
Но в официальном релизе gcc-4.6.2 нет файла msp430f149.h
Поэтому, если ваше предположение верно, то претензии следует адресовать отнюдь не к gcc и его авторам, а к тому, кто составил комплект и положил в него нерабочий файл.

Извините за мою въедливость. Я пишу это потому, что у начинающих после чтения этой темы может возникнуть неверное мнение (и даже предубеждение) о gcc. К сожалению, я с таким сталкивался...


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post

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

 


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


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