|
|
  |
MSP-GCC 4. Кто-нибудь пробовал?, Случайно наткнулся:) |
|
|
|
Oct 6 2009, 11:27
|

фанат дивана
     
Группа: Свой
Сообщений: 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 нет проблем. Короче, если кто-то пробовал, поделитесь пожалуйста впечатлениями.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Oct 11 2009, 08:23
|
Участник

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

|
Отличная новость! Завтра буду пробовать. Надеюсь в нём реализована полноценная поддержка 5й серии
Сообщение отредактировал Ko4egap - Oct 11 2009, 08:36
|
|
|
|
|
Nov 2 2009, 06:07
|

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

|
Цитата(AHTOXA @ Nov 2 2009, 00:27)  Насколько я понял, там "шевелится" только в одном направлении - адаптация под GCC 4. Никаких изменений в плане поддержки новых чипов не наблюдается. Мне новые чипы пока неактуальны, а вот некоторые глюки слегка напрягают (например, проблемы с выровненными структурами и юнионами) Может, в новом GCC это уже пофиксено? Кстати, а в чём заключается поддержка новых чипов? Неужто там настолько всё по-другому? Запустил... Цитата D:\Program Files>F:\NEW\msp430-gcc-4.4.2-gdb-7.0-insight-6.8.exe Программа не умещается в памяти D:\PROGRA~1> Ныпонил...
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Nov 2 2009, 12:22
|

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

|
Цитата(MrYuran @ Nov 2 2009, 09:07)  Кстати, а в чём заключается поддержка новых чипов? Неужто там настолько всё по-другому? Описание периферии (специальные регистры). В GCC часто заголовочный файл один на группу периферии, а в 54xx периферия изменена и ее больше. Уже дополнительный файл для GPIO 54xx создан. Существующая система заголовочных файлов, похоже ( IMHO), плохо стыкуется с новыми контроллерами в плане совместимости. У IAR и CCE один большой файл на конкретный микроконтроллер. Цитата Мне новые чипы пока неактуальны... Для меня, к сожалению, актуальна только серия 54xx.
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
|
Nov 6 2009, 10:14
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 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  */ #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 =)
|
|
|
|
|
Nov 6 2009, 12:49
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 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 =)
|
|
|
|
|
Nov 6 2009, 13:09
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Nov 6 2009, 13:56
|

Начинающий профессионал
    
Группа: Свой
Сообщений: 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). Для этого надо иметь _полный_ комплект описаний регистров в заголовочных файлах.
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
|
Nov 6 2009, 16:45
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Nov 6 2009, 17:25
|

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

|
Цитата(Сергей Борщ @ Nov 6 2009, 19:45)  Ну usi.h и usci.h ведь не смущают - разная периферия, разные файлы. Периферия семейства 5xxx настолько существенно отличается от предыдущих семейств, что мне показалось логичным вынести ее в отдельный файл. Может название не совсем уданое, но ничего лучше в голову не пришло.Есть предложения как улучшить - пишите в список рассылки, там последний год оживление наблюдается. Смущает то, что напрашивается usi_54xx.h и т.д. ВСЁ для этого семейства специфично и плохо стыкуется с имеющейся структурой файлов. Получается, что проект с другого контроллера нельзя практически перевести на это семейство, сменив только тип контроллера в makefile (расширенная периферия для совместимости предположительно не используется). Потребуется имена включаемых файлов изменять. Если такую переносимость во внимание не принимать, то всё годится. hardmodulename_54xx.h вполне понятное название. Предложений по улучшению, к сожалению, нет, одни сомнения.
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
|
Nov 6 2009, 18:03
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Nov 6 2009, 21:25
|

Начинающий профессионал
    
Группа: Свой
Сообщений: 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 точно приходилось подключать несколько файлов.
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
|
Nov 7 2009, 07:45
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Nov 7 2009, 14:08
|

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

|
Цитата(Сергей Борщ @ Nov 7 2009, 10:45)  В WinAVR для подключения описания периферии достаточно подключить только io.h. Именно описания периферии, но не ей же единой. Хочется использовать вс,что есть (таймеры, сторожевой и т.д.). Если говороить только о доступе к периферии, то io.h и полностью согласен с Вами.
--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
|
|
|
|
|
May 21 2010, 11:41
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 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 вроде работает, но требует, чтобы компилятору скармливались все файла зараз, иначе потом линкер концов не находит. Короче, с ходу не взлетел  Со старым всё компилится нормально
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
May 21 2010, 13:06
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 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 ? Посмотрел, в старой версии этот файл один-в-один Таки победил  Пришлось 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 =)
|
|
|
|
|
May 21 2010, 13:14
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
May 21 2010, 13:19
|

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

|
Цитата(Сергей Борщ @ May 21 2010, 17:14)  Сочетание extern и __inline__ выглядит, мягко говоря, странным. Ну, не я ж это придумал! За ключики спасибо, буду играться. Предыдущий результат был с -O3. -Os даёт 13к против 12.7к, опять не в пользу 4 версии  Так и не понял, к какому месту DWARF2 прикручивать... Но в целом прогресс (с прошлого года) заметен. Даже установщик кой-какой приделали. В файлах периферии виднеются F5xx, СС430 и G2xx Да, и это надо ещё на железке прогнать. Старый компилятор, хоть и не без глюков, но собирал рабочие бинарники. Этот - пока не знаю.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
May 21 2010, 13:34
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 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 Совсем тепло...
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
May 24 2010, 09:37
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 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. -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 =)
|
|
|
|
|
May 24 2010, 10:40
|

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

|
Цитата(MrYuran @ May 24 2010, 13:37)  По оптимизации вполне сравнимо с ИАРом. Так и о чём:-) При таком способе оптимизации очень важно грамотно использовать volatile - и там где раньше и без него могло проканать - теперь не проканает...
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
May 25 2010, 05:43
|

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

|
Цитата(AHTOXA @ May 24 2010, 17:50)  Круто! Теперь будет занята четверть объёма флеша  Дело не в этом, просто всё должно быть красиво! Ну и хочется знать хотя бы теоретический предел "сжатия". К тому же, у меня задачи достаточно легковесные (измериловка, обработка, обмен с хостом), а вот к примеру, для автономного прибора с графическим экранчиком, кучей менюшек и даже встроенным блокнотом уже начинает играть рояль. Причём, от оптимизации и потребление может зависеть (хотя, на фоне экранчика, жрущего как лошадь 3мА, это всё копейки...) Или вот например, выпустили серию G2xx. Вот если бы добавили флеша хотя бы до 8кБ, то туда можно было бы упихать что-нибудь стоящее. Попробовал вчера ещё один проект собрать, там что-то непонятное творит. Такое ощущение, что вместо elf-а подсовывает неразлинкованный объектник.
1002TD.elf.lst.zip ( 32.52 килобайт )
Кол-во скачиваний: 80
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
May 25 2010, 09:40
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 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 =)
|
|
|
|
|
May 25 2010, 11:33
|

неотягощённый злом
     
Группа: Свой
Сообщений: 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 реально фактически нет).
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
May 25 2010, 12:06
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 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 Как я и думал, это был объектник, который надо ещё слинковать За один проход никак... Код 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 =)
|
|
|
|
|
Jun 11 2010, 13:29
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 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 =)
|
|
|
|
|
Jun 13 2010, 11:08
|

неотягощённый злом
     
Группа: Свой
Сообщений: 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 - это действительно бага. Цитата Кстати, ключ "вхоле_програм" вызывает подобный глюк при любом раскладе. Не бейте пианиста он играет как умеет
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Jun 17 2010, 07:31
|

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

|
ААААААААААААААААААААААААААААААА!!!!!! Нашел причину всех моих неудач за последний месяц! Идея была в том, чтобы написать культурный 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  Может есть такой ключик, чтобы все структуры упаковать? А то по одной долго возиться, да и править системные исходники не совсем идеологически правильно ###### __attribute__ ((packed)) не помог... все регистры по 2 байта. Со старым компилятором то же самое. Что за жизнь пошла...
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jun 17 2010, 09:25
|

неотягощённый злом
     
Группа: Свой
Сообщений: 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)  Вот кстати интересно: Кто структуры пакует - компилятор или линкер? Думается, что компилятор. Линкер лишь связывает.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Jun 17 2010, 09:31
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 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(); Код 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 =)
|
|
|
|
|
Jun 17 2010, 12:34
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Jun 17 2010, 15:49
|

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

|
Цитата(Сергей Борщ @ Jun 17 2010, 16:34)  С упаковкой при помощи __attribute__((packed)) тоже никаких проблем. Вот и у меня не было, как говорится, пришла беда, откуда не ждали. Причём пробовал и старую версию (в мэйкфайле меняю MSPGCC_ROOT c С:\mspgcc4 на C:\mspgcc) - то же самое. Причём раньше-то точно работало. В нескольких проектах. После этого, правда, пару раз систему переставляли, может чего упустили... А сегодня, в разгар разборок, вообще винчестер сдох. Не выдержал... Видимо, таки придётся учиться собирать из исходников. на bzr, я так понял, готовых сборок не выкладывают
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Jul 6 2010, 06:41
|

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

|
Перекомпилил старый ИАРовский прожект, который раньше был меньше 20к. Результат - больше 30... манипуляции с ключами пока особого эффекта не дают (наверно, не знаю нужную комбинацию) В конце концов, полфлэша свободно, так что пока не жмёт. А вот если бы пришлось утаптывать в Fx47, то критично..
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Apr 5 2012, 06:16
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 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 =)
|
|
|
|
|
Apr 5 2012, 07:40
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 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 =)
|
|
|
|
|
Apr 5 2012, 08:21
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 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 байт отжал  Итого, -8% ровно. Я бы на месте TI премию выписал всем новым (и старым) энтузиастам, или хотя бы радиочасики подарил, на память
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Apr 5 2012, 13:02
|

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

|
Цитата(MrYuran @ Apr 5 2012, 14:36)  Там что-то все про баги, а я вот старый проект просто тупо собрал, и все работает как надо. Глюки там были при -ffunction-sections -fdata-sections + -gc-sections. Остальное нормуль вроде. Но я пока на старой версии, не хочу экспериментировать. Цитата Попробовали крайнюю версию 4.6.2 - опять -combine отломали... Да это ещё нигде толком не работает, имхо. По крайней мере, закладываться на работоспособность этой фичи я бы не стал ещё год как минимум.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Apr 6 2012, 09:44
|

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

|
Цитата(AHTOXA @ Apr 5 2012, 17:02)  Глюки там были при -ffunction-sections -fdata-sections + -gc-sections. Остальное нормуль вроде. Но я пока на старой версии, не хочу экспериментировать. Да это ещё нигде толком не работает, имхо. По крайней мере, закладываться на работоспособность этой фичи я бы не стал ещё год как минимум. Глюков с секциями не обнаружено. Комбайновая фича конечно необязательная, но иногда очень полезная, когда упихиваешь в прошивку последнюю сотню-другую байт. И тут вдруг пару кБ нахаляву...
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
May 25 2012, 03:25
|

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

|
Цитата(MrYuran @ May 24 2012, 14:01)  Сегодня обнаружил эпический глюк в этой версии. А почему Вы решили, что глюк именно в компиляторе? Я неоднократно сталкивался с тем, что проекты перестают работать при смене версии gcc (2-3-4), и каждый раз причиной оказывались глюки моих программ, а не компилятора... Если уж обвиняете компилятор - приведите исходный код, результат его компиляции и покажите, что конкретно не так... Цитата(MrYuran @ May 24 2012, 14:01)  Похоже, ошибки в h-файлах периферии, хотя вроде ти-шные там теперь, без самопала. Если ошибки в сторонних файлах, то при чем тут компилятор?
Сообщение отредактировал alx2 - May 25 2012, 03:29
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
May 25 2012, 05:04
|

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

|
Цитата(alx2 @ May 25 2012, 07:25)  Если ошибки в сторонних файлах, то при чем тут компилятор?  При том, что это комплект. И он должен быть полностью рабочий. Будет время, посмотрю, что там не так. Код #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 =)
|
|
|
|
|
May 25 2012, 08:05
|

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

|
Вот листинг старой версии (трэш и угар  но работает) 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 Сразу раскрутился цикл  Лично я никакого криминала не нашел. Есть ещё последний вариант с тактированием флеш-контроллера. Код 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 =)
|
|
|
|
|
May 28 2012, 05:07
|

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

|
Цитата(MrYuran @ May 25 2012, 10:04)  При том, что это комплект. И он должен быть полностью рабочий. ..... Учитывая, что изъян в единичном экземпляре, склоняюсь к косяку в <msp430f149.h> Вы совершенно правы насчет того, что комплект должен быть рабочим. Но в официальном релизе gcc-4.6.2 нет файла msp430f149.h Поэтому, если ваше предположение верно, то претензии следует адресовать отнюдь не к gcc и его авторам, а к тому, кто составил комплект и положил в него нерабочий файл. Извините за мою въедливость. Я пишу это потому, что у начинающих после чтения этой темы может возникнуть неверное мнение (и даже предубеждение) о gcc. К сожалению, я с таким сталкивался...
--------------------
Всего наилучшего, Alex Mogilnikov
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|