Mplab source file open error

[Microchip][Mplab X IDE v5.35] Makefile-default.mk has some problem when build source OS: Windows 64bit Software: Mplab X IDE v5.35 Compiler: XC8 (v2.10) Menu -> Production -> Build Main Project make1: *** [nbproject/Makefile-default.mk:107: build/default/production/main.p1] Error -1073741515 make2: *** [nbproject/Makefile-default.mk:91: .build-conf] Error 2 make: *** [nbproject/Makefile-impl.mk:39: .build-impl] Error 2 Here is my screen capture. In the […]
LIST P=PIC16F84A ; указатель процессора
include

org 0x00 ; Вектор сброса
Goto Start
;***************************************************************
org 004 ;Начало процедуры обработки прерывания
movwf temp ; Сохранение рабочего регистра W в регистре temp
clrwdt ;Очистка сторожевого таймера для предотврашения
call Int1 ; сброса процессора каждый 18мс
movlw b’10100000′ ; Разрешаем прерывания от таймера
movwf INTCON ;
movf temp,w ;Востанавливаем значение рабочего регистра
clrwdt ;Очистка сторожевого таймера
return ;Выход из процедуры обработки прерывания

;****************************************************************
org 0x10
segment ; Таблица преобразования DEC -> семисегментный код.
CLRF PCLATH
ADDWF PCL, F
dt 07E, b’00001100′, 0B6, 09E, 0CC, 0DA, 0FA, 00E, 0FE, 0DE
Data1 ;*************десятки
CLRF PCLATH
ADDWF PCL, F
;0 1 2 3 4 5 6 7 8 9
dt 0,0,0,0,0,0,0,0,0,0
dt 1,1,1,1,1,1,1,1,1,1
dt 2,2,2,2,2,2,2,2,2,2
dt 3,3,3,3,3,3,3,3,3,3
dt 4,4,4,4,4,4,4,4,4,4
dt 5,5,5,5,5,5,5,5,5,5

CLRF PCLATH
ADDWF PCL, F
;0 1 2 3 4 5 6 7 8 9
dt 0,1,2,3,4,5,6,7,8,9 ;0
dt 0,1,2,3,4,5,6,7,8,9 ;10
dt 0,1,2,3,4,5,6,7,8,9 ;20
dt 0,1,2,3,4,5,6,7,8,9 ;30
dt 0,1,2,3,4,5,6,7,8,9 ;40
dt 0,1,2,3,4,5,6,7,8,9 ;50
; Программные регистры:

skan1 equ 20 ;рег хранения RB1,2
clok1 equ 21 ; хранение часов
sek equ 22 ;регистр хранения секунд
min equ 23 ;регистр хранения минут
cl_k equ 24

Dig_x equ 25 ; Значение X0:00 для индикации.
Dig_y equ 26 ; Значение 0X:00 для индикации.
Dig_z equ 27 ; Значение 00:X0 для индикации.
Dig_exp equ 28 ; Значение 00:0X для индикации.
cnt1 equ 29 ;переменная исп для задержки времени
cnt2 equ 2A ;переменная исп для задержки времени
cnt_r equ 2B ;переменная исп для задержки времени
temp equ 2C
clok2 equ 2D
temp1 equ 2E
n1 equ 2f
n2 equ 30
Start ; Начальная инициализация.
clrw
bsf STATUS,RP0 ; Обращение к банку 1.
clrf PORTA ; Обнулить порт А.
clrf PORTB ; Обнулить порт В.
movlw b’00010000′
movwf TRISA ; RA0 — RA3 выходы, RA4 вход.
movlw b’00000001′
movwf TRISB ; RB1 — RB7 выходы.RB0 вход
movlw b’00000101′ ;коэффициен предделителя 64
movwf OPTION_REG
bcf STATUS,RP0 ; Обращение к банку 0.
movlw b’10100000′
movwf INTCON
clrf min
clrf sek
clrf cl_k
movlw 0
movwf TMR0
movlw 01 ; Для контроля дисплея
movwf Dig_x
movlw 02 ; загрузить во все регистры индикации 8.
movwf Dig_y
movlw 03
movwf Dig_z
movlw 04
movwf Dig_exp
movlw .131
movwf clok1
movwf TMR0
movlw .1
movwf temp1
Start1 ; Основной цикл программы.
movlw 19 ; Установить счетчик циклов индикации.
movwf cnt_r
loop1 clrwdt
call refresh ;индикаторы.
decfsz cnt_r, f
goto loop1
;***присвоение значения регистрам индикации в зависимости от режима ;индикации******
clrwdt
btfss temp1,0
call Temp_min
btfsc temp1,0
call Temp_clk
;******присвоение значения регистрам индикации
movf n1,0
call Data1
movwf Dig_x
movf n1,0
call Data2
movwf Dig_y
movf n2,0
call Data1
movwf Dig_z
clrwdt
movf n2,0
call Data2
movwf Dig_exp
;********клавишы установки режима индикации и времени*******
call Delay
btfss PORTA,4 ;сканируем клавишу установки режима RA4 вывод 3
incf temp1,1 ;прибавляем к темпу 1
btfss PORTB,0 ;клавиша установки времени RB0 вывод 6
call Min_clk
goto Start1
;************************************************************
Temp_min
movf min,0
movwf n1
movf sek,0
movwf n2
return
;************************************************************
Temp_clk
movf cl_k,0
movwf n1
movf min,0
movwf n2
return
;****************выбор прибавить минуты(0) или часы(1)***********
Min_clk
clrwdt
btfss temp1,0
incf min,1
btfsc temp1,0
incf cl_k
;*******проверка 60 мин 24 часа*****************
movf min,0
sublw .60
btfsc STATUS,Z
clrf min
movf cl_k,0
sublw .24
btfsc STATUS,Z
clrf cl_k
clrwdt
return
Sek ;*****************деление на125
movlw .131 ;записываем 131 т.к 256-125=131
movwf clok1
incfsz sek
movf sek,0
sublw .60
btfsc STATUS,Z
call Min
return

Min
clrf sek
incfsz min
movf min,0
sublw .60
btfsc STATUS,Z
call Clok
retfie

Clok
clrf min
incfsz cl_k
movf cl_k,0
sublw .24
btfsc STATUS,Z
clrf cl_k
retfie

Int1 ;процедура обработки прерывания
movlw .131 ;записываем 131 т.к 256-125=131
addwf TMR0,1 ;256(максимальное значение таймера)
incfsz clok1 ;125(нужный коэффициен деления)
return
call Sek
return
;***********************Вывод на индикатор*************
refresh ; Процедура сканирования индикации.
movf Dig_x, W ; Значение деситых.часов для индикации.
call segment ; Преобразование DEC -> семисегментный код.
movwf PORTB ; Вывод цифры на индикатор.
bcf PORTA, 0 ; Активизировать индикатор.
call Delay ; Задержка времени для сканирования.
bsf PORTA, 0 ; Отключить индикатор.

movf Dig_y, W ; Значение ед.часов для индикации.
call segment ; Преобразование DEC -> семисегментный код.
movwf PORTB ; Вывод цифры на индикатор.
bcf PORTA,1 ; Активизировать индикатор.
call Delay ; Задержка времени для сканирования.
bsf PORTA,1 ; Отключить индикатор.

movf Dig_z, W ; Значение десят.минут для индикации.
call segment; Преобразование DEC -> семисегментный код.
movwf PORTB ; Вывод цифры на индикатор.
bcf PORTA,2 ; Активизировать индикатор.
call Delay ; Задержка времени для сканирования.
bsf PORTA,2 ; Отключить индикатор.

movf Dig_exp, W ; Значение ед.минут.
call segment; Преобразование DEC -> семисегментный код.
movwf PORTB ; Вывод цифры на индикатор.
bcf PORTA,3 ; Активизировать индикатор.
call Delay ; Задержка времени для сканирования.
bsf PORTA,3 ; Отключить индикатор.
return
; ************************************************************
Delay ; Подпрограмма задержки времени
clrwdt
movlw .5 ; для сканирования индикации.
movwf cnt1
nop
beta movlw .150
movwf cnt2
Alfa nop
nop
decfsz cnt2, f
goto Alfa
nop
nop
decfsz cnt1, f
goto beta
nop
return
; *******************************************************
end

Clean: Deleting intermediary and output files.
Clean: Done.
Executing: «E:Program FilesMicrochipMPASM SuiteMPAsmWin.exe» /q /p18F452 «Untitled.asm» /l»Untitled.lst» /e»Untitled.err»
Warning[215] F:1UNTITLED.ASM 1 : Processor superseded by command line. Verify processor symbol.
Warning[205] F:1UNTITLED.ASM 2 : Found directive in column 1. (include)
Message[301] E:PROGRAM FILESMICROCHIPMPASM SUITEP16F84A.INC 35 : MESSAGE: (Processor-header file mismatch. Verify selected processor.)
Error[126] E:PROGRAM FILESMICROCHIPMPASM SUITEP16F84A.INC 114 : Argument out of range (must be greater than or equal to 255)
Error[126] E:PROGRAM FILESMICROCHIPMPASM SUITEP16F84A.INC 115 : Argument out of range (__MAXRAM must be used first)
Error[126] E:PROGRAM FILESMICROCHIPMPASM SUITEP16F84A.INC 115 : Argument out of range (__MAXRAM must be used first)
Error[126] E:PROGRAM FILESMICROCHIPMPASM SUITEP16F84A.INC 115 : Argument out of range (__MAXRAM must be used first)
Warning[203] F:1UNTITLED.ASM 4 : Found opcode in column 1. (Goto)
Warning[205] F:1UNTITLED.ASM 6 : Found directive in column 1. (org)
Warning[205] F:1UNTITLED.ASM 17 : Found directive in column 1. (org)
Error[118] F:1UNTITLED.ASM 19 : Overwriting previous address contents (0010)
Error[118] F:1UNTITLED.ASM 19 : Overwriting previous address contents (0011)
Error[118] F:1UNTITLED.ASM 20 : Overwriting previous address contents (0012)
Error[118] F:1UNTITLED.ASM 20 : Overwriting previous address contents (0013)
Error[118] F:1UNTITLED.ASM 21 : Overwriting previous address contents (0014)
Error[118] F:1UNTITLED.ASM 21 : Overwriting previous address contents (0015)
Warning[203] F:1UNTITLED.ASM 136 : Found opcode in column 1. (return)
Warning[203] F:1UNTITLED.ASM 143 : Found opcode in column 1. (return)
Warning[203] F:1UNTITLED.ASM 161 : Found opcode in column 1. (return)
Warning[203] F:1UNTITLED.ASM 232 : Found opcode in column 1. (nop)
Warning[207] F:1UNTITLED.ASM 235 : Found label after column 1. (Alfa)
Warning[203] F:1UNTITLED.ASM 237 : Found opcode in column 1. (decfsz)
Warning[203] F:1UNTITLED.ASM 243 : Found opcode in column 1. (nop)
Warning[203] F:1UNTITLED.ASM 244 : Found opcode in column 1. (return)
Warning[205] F:1UNTITLED.ASM 246 : Found directive in column 1. (end)
Halting build on first failure as requested.
BUILD FAILED: Fri May 13 16:36:52 2005

Цитата
Сообщение от Voland_
Посмотреть сообщение

что-то вписали не туда. пути к файлам нужно указывать в окошке «include path», там будет набор из нескольких.
Ну, и директивы я впервые вижу, что пишутся через запятую — обычно через пробел. Misc controls — тоже не понял зачем это нужно…
И еще — откройте файл со странным include’ом: — сдается мне в нем указан именно относительный путь, а не просто имя файла. Вот компилер его и не может найти.

Спасибо. В общем после хитрых плясок с бубном получилось скомпилировать проект, но произошла другая проблемка — hex файл который у меня получился немного отличается от оригинала:
Например начало файла в оригинале:
:020000040800F2
:10000000A00A0020010100087519000877190008EE
:10001000791900087B1900087D190008000000000C

И у меня:
:020000040800F2
:10000000F80B0020E9010008591B00085B1B0008E1
:100010005D1B00085F1B0008611B0008000000005A

Соответственно плата которую шью, прошивается но прога не работает.
Я грешу на то что во время компиляции ф .h файле STM32_USB-FS-Device_LibLibrariesSTM32_USB-FS-Device_Driverincusb_type.h была ошибка (отсутствовала «;»)я исправил, но видимо причина более серьезная. Вот сейчас думаю, что делать. (Библиотеку перескачивал, та же беда).
Буду рад любой помощи. Спасибо.

Добавлено через 1 час 38 минут
Удалось пропатчить библиотечку, теперь она имеет вид:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/******************** (C) COPYRIGHT 2011 STMicroelectronics ********************
* File Name          : usb_type.h
* Author             : MCD Application Team
* Version            : V3.3.0
* Date               : 21-March-2011
* Description        : Type definitions used by the USB Library
********************************************************************************
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*******************************************************************************/
 
/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __USB_TYPE_H
#define __USB_TYPE_H
 
/* Includes ------------------------------------------------------------------*/
#include "usb_conf.h"
#include "stdbool.h"
 
/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
#ifndef NULL
#define NULL ((void *)0)
#endif
 
#if !defined (__STM32F10x_H) && !defined(__STM32L1XX_H)
 
typedef signed long      s32;
typedef signed short     s16;
typedef signed char      s8;
 
typedef volatile signed long      vs32;
typedef volatile signed short     vs16;
typedef volatile signed char      vs8;
 
typedef unsigned long       u32;
typedef unsigned short      u16;
typedef unsigned char       u8;
 
typedef unsigned long  const    uc32;  /* Read Only */
typedef unsigned short const    uc16;  /* Read Only */
typedef unsigned char  const    uc8;   /* Read Only */
 
typedef volatile unsigned long      vu32;
typedef volatile unsigned short     vu16;
typedef volatile unsigned char      vu8;
 
typedef volatile unsigned long  const    vuc32;  /* Read Only */
typedef volatile unsigned short const    vuc16;  /* Read Only */
typedef volatile unsigned char  const    vuc8;   /* Read Only */
 
typedef enum { RESET = 0, SET   = !RESET } FlagStatus, ITStatus;
 
typedef enum { DISABLE = 0, ENABLE  = !DISABLE} FunctionalState;
 
typedef enum { ERROR = 0, SUCCESS  = !ERROR} ErrorStatus;
#endif /* __STM32F10x_H && __STM32L15x_H */
 
#define TRUE (true)
#define FALSE (false)
 
/* Exported macro ------------------------------------------------------------*/
/* Exported functions ------------------------------------------------------- */
/* External variables --------------------------------------------------------*/
 
#endif /* __USB_TYPE_H */
 
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/

Но тем не менее, получаемый хекс файл на выходе отличается от оригинала,значит проблема была не в ней. Уже весь мозг сломал что тут может быть. Может кто-то сталкивался с чем-то подобным? буду рад любой помощи. Спасибо.

Форум РадиоКот :: Просмотр темы — MPLAB в вопросах и ответах


Автор:  uldemir [ Вт мар 14, 2017 16:00:15 ]
Заголовок сообщения:  Re: MPLAB в вопросах и ответах

не угадал.

Код:

Error[151]   C:TEMPTEST.XTEST.ASM 1222 : Operand contains unresolvable labels or is too complex

Поигрался… конструкция типа

Код:

IF HIGH(1024) != 0

проходит, но стоит в аргумент поставить $ или имя метки — нет. Чего-то не понимаю.

Разобрался.
В пропертях сборки нужно было поставить галочку Build in Absolute mode


Автор:  leha_m1986 [ Ср июн 07, 2017 13:49:18 ]
Заголовок сообщения:  Re: MPLAB в вопросах и ответах

здравствуйте! не запускается MPLAB. «Cannot open file @C:PROGRA~1MICROC~1MPLABXv3.20MPLAB_~2etcMPLAB_~1.clusters» for reading. Не удается найти указанный файл.»

MPLAB v.3.20, ОС WinXP SP3.


Автор:  Zhuk72 [ Ср июн 07, 2017 14:59:22 ]
Заголовок сообщения:  Re: MPLAB в вопросах и ответах

Может все-таки MPLAB Х?


Автор:  Пока_без_кота [ Вс июн 11, 2017 11:12:52 ]
Заголовок сообщения:  Re: MPLAB в вопросах и ответах

Доброго времени суток. MPLAB 8.92. Как в симуляторе задать частоту сигнала для работы Таймера 1 в режиме тактирования от внешнего источника ?


Автор:  КРАМ [ Вс июн 11, 2017 11:27:34 ]
Заголовок сообщения:  Re: MPLAB в вопросах и ответах

Подать на вход тактирования сигнал из Стимулов. Только этот сигнал будет все равно привязан к тактирующей ядро частоте. Патамушта эта частота и является единственным базовым сигналом симулятора.


Автор:  botchin [ Вс июн 11, 2017 14:01:10 ]
Заголовок сообщения:  Re: MPLAB в вопросах и ответах

Вложение:



SCL.doc [485 KiB]

Скачиваний: 270

Подать на симуляторе .scl файл

что-то такое

Код:

onfiguration for «pic16f628a» is
end configuration;

testbench for «pic16f628a» is
begin
    process is
    begin
        wait;
    end process;

    clk_1: process is
    begin
        loop
            T1OSCI <= ‘0’;
            wait for 200 ns   ;
            T1OSCI <= ‘1’;
          wait for 400 ns   ;
        end loop;
        T1OSCI <= ‘1’;
    end process clk_1;

end testbench;

Етот код подасть на вход T1OSCI 0 за время 200 ns и 1 за время 400ns вне зависимости от такта МК


Автор:  Пока_без_кота [ Пн июн 12, 2017 11:33:19 ]
Заголовок сообщения:  Re: MPLAB в вопросах и ответах

Спасибо, утянул как пример.


Автор:  Feklistov_as [ Вт сен 19, 2017 19:32:27 ]
Заголовок сообщения:  Не работает в железе.

Доброго времени суток! Проблема примерно следующая:
Собрал терморегулятор для научных целей с некоторыми наворотами. В протеусе и при втутрисхемной отладке через PicKit3 устройство работает.
Если же запускать автономно, то отказывается работать основная функция терморегулятора- включать/отключать нагрузку, при том как все остальное работает исправно(опрос датчиков температуры, вывод информации на экран, таймеры, запись/восстановление параметров из EEPROM).
Бьюсь не один день, просматривал правильность выбора банков, страниц памяти(в конечном итоге все впихнул на одну страницу), по разному задавал адрес переменным. не знаю куда податься. Подскажите, может есть какие-то типовые ошибки, или кто-то сталкивался с подобным.
Код огромный, выкладывать его весь не смысла, а где проблема — не знаю.
Изображение


Автор:  uldemir [ Вт сен 19, 2017 19:54:57 ]
Заголовок сообщения:  Re: MPLAB в вопросах и ответах

Попробуйте вместо bsf/bcf PORTA… писать bsf/bcf LATA. Ну и аналогично все записи в порты делать через LAT регистры, а не PORT.


Автор:  Feklistov_as [ Вт сен 19, 2017 20:37:55 ]
Заголовок сообщения:  Re: MPLAB в вопросах и ответах

Цитата:

Попробуйте вместо bsf/bcf PORTA… писать bsf/bcf LATA. Ну и аналогично все записи в порты делать через LAT регистры, а не PORT.

ПОМОГЛО!!!! :)))

Применил эту правку только к PORTA.
Бросил проект 2 месяца назад из-за этой беды. Буду теперь знать. Но непонятно почему другие порты нормально работают и через регистры PORT?! В некоторых местах, там тоже по-битное обращение.
А самое неприятное в этой проблеме — что Proteus и внутрисхемная отладка MPLAB+PicKit3 работала правильно!!! :kill:

Огромное СПАСИБО!!! :beer:


Автор:  uldemir [ Вт сен 19, 2017 21:22:28 ]
Заголовок сообщения:  Re: MPLAB в вопросах и ответах

Потому что при модификации PORTx считывается состояние пинов порта, производится модификация и запись. Поэтому, если на каком выходе есть чрезмерная нагрузка (или ёмкостная нагрузка в виде затвора полевика), вы сделали BSF PORTA, 0 — вроде впорядке — прочитали, изменили на 1 и записали. Но, если следом делаем BSF PORTA, 1 — мы снова читаем порт, и если на нулевом разряде по какой-то причине лог.1 не успел установиться (кто-то давит или ёмкость не успела зарядиться), то прочитается 0 и он же будет обратно записан. Об этом нужно было помнить у старых микроконтроллеров, у которых еще не было регистров LAT. А у новых — надо пользоваться им для вывода.


Автор:  profradio [ Пт окт 06, 2017 06:27:13 ]
Заголовок сообщения:  Re: MPLAB в вопросах и ответах

Добрый день! Прошу помочь разобраться в (не основных) ошибках MPLAB X компилятор XC8(v 1.43)(Программа вывода цифр, символов и заглавных букв русского алфавита на дисплей нокиа 5110/3110 с мк PIC16F676- пишу сам, берите если кому надо. 50% слов, 25% памяти.)
При компилировании выдает 3 ошибки —
lcd5110.c:74: warning: (361) function declared implicit int
lcd5110.c:78: warning: (349) non-prototyped function declaration for «vs»
lcd5110.c:81: warning: (373) implicit signed to unsigned conversion
Файл С во вложении, мк PIC16F676
Еще попутный вопрос — почему компилятор ругается критической ошибкой, если функции int lcd_write_8_bit(adr) присвоить значение не int, а unsigned char, хотя внутри функции все переменные unsigned char.

Добавлено after 19 minutes 16 seconds:
Так, с одной ошибкой я разобрался
lcd5110.c:78: warning: (349) non-prototyped function declaration for «vs»
— удалил глобальную переменную unsigned char simv и объявил ее локальной в функции: void vs(unsigned char simv).
Как я понял, компилятор говорит — что программе не нужна глобальная переменная. (Кстати загрузка памяти и программных слов сократилась — что радует.)

Добавлено after 7 minutes 28 seconds:
Еще почему-то если глобальную переменную adr удалить и перенести в функцию: int lcd_write_8_bit(unsigned char adr) то выходят критические ошибки компиляции:
lcd5110.c:84: error: (987) arguments redeclared
lcd5110.c:84: error: (1098) conflicting declarations for variable «lcd_write_8_bit» (lcd5110.c:83)
Хотя переменная используется только внутри функции lcd_write_8_bit

Вложения:
Комментарий к файлу: файл си для mplab x



lcd5110.c [4.93 KiB]

Скачиваний: 731


Автор:  uldemir [ Пт окт 06, 2017 07:07:36 ]
Заголовок сообщения:  Re: MPLAB в вопросах и ответах

Правильно ругается. Я бы на месте компилятора вообще объявил бы забастовку и потребовал повышения зарплаты за вредность.

Первое, что бросилось в глаза, то что вы объявили переменную simv, не означает, что объявлен тип агрумента с таким же именем в заголовке функции. Да и вообще, объявление функции именно для того и делается, чтобы программа знала, что туда надо передавать.


Автор:  profradio [ Пт окт 06, 2017 08:09:23 ]
Заголовок сообщения:  Re: MPLAB в вопросах и ответах

Прошу немного доступнее.. я только учусь программированию на си. Т.е. надо декларировать функцию еще раз в начале и дать значение её аргументу вот так:
void vs (unsigned char); и так для всех функций?
Да, спасибо — теперь я понял смысл двойного объявления функций.
Ошибка осталась только одна:
lcd5110.c:82: warning: (373) implicit signed to unsigned conversion
Т.е. видимо говорит что тут неявное преобразование беззнакового char в знаковый int — наверное в вычислениях внутри функции появляется отрицательное значение (хотя по моим расчетам не должно).
И аргумент функции int lcd_write_8_bit(int); принимает только int — на unsigned char ругается. Но если все сделать int — то память +30% сразу. Видимо надо делать явное преобразование типов данных.
Да и еще разобрался с этим «Еще почему-то если глобальную переменную adr удалить и перенести в функцию: int lcd_write_8_bit(unsigned char adr) то выходят критические ошибки компиляции» —
Надо делать так — int lcd_write_8_bit(int adr) — тогда все ок и -2% памяти.

Вложения:
Комментарий к файлу: файл С v2.0



lcd5110.c [4.97 KiB]

Скачиваний: 681


Автор:  uldemir [ Пт окт 06, 2017 09:00:28 ]
Заголовок сообщения:  Re: MPLAB в вопросах и ответах

Код:

int lcd_write_8_bit(int);
lcd_write_8_bit(tab[simv+j]); // П

Вот здесь вы объявили что функции должна передаваться переменная типа знакового инт. А потом передаёте элемент массива состоящего из беззнаковых char. Определитесь. Тем более, что это потенциально опасное граблями место.


Автор:  profradio [ Пт окт 06, 2017 09:12:02 ]
Заголовок сообщения:  Re: MPLAB в вопросах и ответах

Отличное замечание! (память -1%, слова -5%)! Все теперь в unsigned char — компилирует, не нравится только вот это:
lcd5110.c:94: warning: (373) implicit signed to unsigned conversion (Где та собака (знак) зарыт)


Автор:  uldemir [ Пт окт 06, 2017 09:37:28 ]
Заголовок сообщения:  Re: MPLAB в вопросах и ответах

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

Попробуйте написать adr <<= 1; вместо
adr = (adr<<1);

p.s. Google говорит, что это есть в стандарте языка C и называется integral promoution.

Цитата:

Because the standard says so. The operands to binary operators undergo integral promotion, in which anything smaller than an int is promoted to int; the results of the operation have type int as well. And if the original value were, say, 0x12, the results would be 0x120, and assigning this to an unsigned char will cause a change in value. (The assigned value will be 0x20.) Whence the warning.


Автор:  profradio [ Пт окт 06, 2017 09:51:57 ]
Заголовок сообщения:  Re: MPLAB в вопросах и ответах

uldemir, в точку!
После adr <<= 1; MPLABу все понравилось. (страшно представить как кто-то написал программу компиляции и продумал все варинги в MPLAB)
Я думал это одно и то же. А тут — память -2% еще — из 19% в 17%.
Мне бы Вашу смекалку:)
Файл С приукрасил немного — последняя версия во вложении память 17% слова 46%.

Вложения:
Комментарий к файлу: finish



lcd5110.c [5.2 KiB]

Скачиваний: 559


Автор:  uldemir [ Пт окт 06, 2017 10:12:42 ]
Заголовок сообщения:  Re: MPLAB в вопросах и ответах

Если у вас не PRO версия — подпишитесь на 60 дней, и обалдеете насколько еще код усохнет. А потом посмотрите в дизассемблере, что он накодил в свободной версии и радости уже не будет никогда. У меня был один проект, который пытался впихнуть в pic16F723a, так вот он перестал влазить. Подписался на PRO — сразу половина памяти стала свободной! Жаль, что эти 60 дней уже давно прошли, а второй раз они их не дают.

Вот с этим сдвигом всё-равно непонятки. В документации на XC написано, что компилятор сам умеет определять операции ротации. И написано, что

Цитата:

c = (c << 1) | (c >> 7);
if c is unsigned and non-volatile, the compiler will detect that the intended
operation is a rotate left of 1 bit and will encode the output using the PIC MCU rotate
instructions.

Но почему-то выдаёт такое же предупреждение.

Хм. глава про integral promotion находится как раз на предыдущей странице. правда, там упоминается, что типа «типа если результат будет одинаков с преобразованием и без, то преобразование не производится». Ну как-то так, если своими словами. поэтому почему-то в певом случае ( a = (a <<1)) преобразование производится и есть предупреждение, а во втором (a <<= 1) не производится.


Автор:  Siarzhuk [ Сб окт 07, 2017 12:58:02 ]
Заголовок сообщения:  Re: MPLAB в вопросах и ответах

Жаль, что эти 60 дней уже давно прошли, а второй раз они их не дают.
[…]
Вот с этим сдвигом всё-равно непонятки. В документации на XC написано, что компилятор сам умеет определять операции ротации. И написано, что

Цитата:

c = (c << 1) | (c >> 7);

Но почему-то выдаёт такое же предупреждение.

Может дело как раз во Free версии? Т.е. он, конечно, может оптимизировать ротациями, но не за бесплатно — а для нас-халявщиков компилируя выражение буквально операнд за операндом — вот и напарывается на преобразование. А какой тип у c в данном куске кода?
PS: А вообще XC8 — ещё тот супчик — http://www.microchip.su/showthread.php?t=17888. Возможно и этот случай — косяк компилятора.


Страница 18 из 25 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/

Понравилась статья? Поделить с друзьями:
  • Mplab database error message
  • Mpksldrv sys цифровая подпись как исправить windows 7
  • Mpi error message truncated
  • Mpc hc как изменить скорость воспроизведения
  • Mpall id error 0001