MPLAB в вопросах и ответах
Re: MPLAB и русский беда.
Еще одна глобальная проблема, не могу создать
unsigned char temp[10]; или
char fuck[21];
в общем любой char в любом месте кода.
Опубликованы в коде пару чаров и больше не дает создать, выдает только на один опубликованый чар вот таких море ошибок.
Error [1253] double.c; 55. could not find space (101 bytes) for auto/param block
Error [712] D:\PICProgramming\mplab\Vacuum-tonus\tonus.c; 649. can't generate code for this expression
Error [712] D:\PICProgramming\mplab\Vacuum-tonus\tonus.c; 461. can't generate code for this expression
Error [712] D:\PICProgramming\mplab\Vacuum-tonus\tonus.c; 475. can't generate code for this expression
Error [712] D:\PICProgramming\mplab\Vacuum-tonus\tonus.c; 485. can't generate code for this expression
Error [1253] C:\Program Files\HI-TECH Software\PICC\PRO\9.65\sources\llmod.c; 21. could not find space (101 bytes) for auto/param block
Error [1253] D:\PICProgramming\mplab\Vacuum-tonus\tonus.c; 73. could not find space (101 bytes) for auto/param block
Error [1253] C:\Program Files\HI-TECH Software\PICC\PRO\9.65\include\lcd887.h; 103. could not find space (101 bytes) for auto/param block
Компилятор Hi-tech C Pro
unsigned char temp[10]; или
char fuck[21];
в общем любой char в любом месте кода.
Опубликованы в коде пару чаров и больше не дает создать, выдает только на один опубликованый чар вот таких море ошибок.
Error [1253] double.c; 55. could not find space (101 bytes) for auto/param block
Error [712] D:\PICProgramming\mplab\Vacuum-tonus\tonus.c; 649. can't generate code for this expression
Error [712] D:\PICProgramming\mplab\Vacuum-tonus\tonus.c; 461. can't generate code for this expression
Error [712] D:\PICProgramming\mplab\Vacuum-tonus\tonus.c; 475. can't generate code for this expression
Error [712] D:\PICProgramming\mplab\Vacuum-tonus\tonus.c; 485. can't generate code for this expression
Error [1253] C:\Program Files\HI-TECH Software\PICC\PRO\9.65\sources\llmod.c; 21. could not find space (101 bytes) for auto/param block
Error [1253] D:\PICProgramming\mplab\Vacuum-tonus\tonus.c; 73. could not find space (101 bytes) for auto/param block
Error [1253] C:\Program Files\HI-TECH Software\PICC\PRO\9.65\include\lcd887.h; 103. could not find space (101 bytes) for auto/param block
Компилятор Hi-tech C Pro
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: MPLAB и русский беда.
pro в мусор, пользовать стд.
и хотелось бы видеть текст, кроме ошибок.
и хотелось бы видеть текст, кроме ошибок.
Re: MPLAB и русский беда.
А чего за std ? Дайте полное название. Перейду.
А полный текст вот.
Спойлера не хватает. Чего то я не нашел тут. Есть какие то LIST но не пашут.
А полный текст вот.
Спойлера не хватает. Чего то я не нашел тут. Есть какие то LIST но не пашут.
Код: Выделить всё
#define _XTAL_FREQ 20000000 // Define Frequency 20.0 MHz for function __delay_ms
//#include <pic.h> // Include header file for MCU
#include <lcd887.h> // Include Library for i2c bus
#include <1wire887.h> // Include Library for 1-Wire bus
#include <string.h> // Include Library for LCD display
#include <stdio.h> // Include Library for LCD display
#include <encoder.h>
__CONFIG(HS & WDTDIS & LVPDIS); // Config. High speed clock,Disable watchdog and Disable LVP
unsigned long freq=0, count = 0, time1 = 0, sys1 = 0;
char flag_capture = 0; // Keep status capture working
int resh = 0, resl = 0, maxadc = 0, adc=0, press = 0, iclr = 0, iclr1 = 0;
int it = 0, EncP = 0, TD = 0, TU = 0, knt = 0, processID = 0, Delay1 = 0;
int vak = 100, gister = 50;
unsigned long TimeLCD1 = 0, TimeLCD2 = 0, TimeStop = 0, timetemp = 0, TimeClose = 0, TimeOpen = 0, idleTime = 0, dispDel = 0;
unsigned int TimeUp = 0, TimeDn = 0, TimeAll = 1;
unsigned char menuId = 10;
char temp[12], vtemp[10];
void Delay_ms(unsigned int tick)
{
while(tick--) // Loop counter delay time
{
__delay_ms(1); // Delay 1 ms
}
}
void Delay_sound(unsigned int tick) // Delay 100 us per tick
{
while(tick--)
{
__delay_us(90); // Delay 90 us
}
}
void Sound(unsigned int freq,unsigned int time)
{
unsigned int dt=0,m=0; // Keep value and
TRISC0 = 0; // Set RC0 output mode
dt = 5000/freq; // Keep active logic delay
time = (5*time)/dt; // Keep counter for generate sound
for(m=0;m<time;m++) // Loop for generate sound(Toggle logic P0.12)
{
RC0 = 1; // RC0=1
Delay_sound(dt); // Delay for sound
RC0 = 0; // RC0=0
Delay_sound(dt); // Delay for sound
}
}
void interrupt CCP1_INT(void)
{
if (INTF)
{
INTF = 0;
count++;
if (time1 == 0) time1 = sys1;
else if (sys1 - time1 > 1000)
{
freq = count;
time1 = 0;
count = 0;
}
}
if (T0IF)
{
sys1+=13; // 13
TMR0=3; // 3
T0IF = 0;
}
}
//---------- Температура ----------
unsigned int read_temp(void)
{
unsigned char temp_buff[2]; // Keep raw temp.
char err_status; // Keep respond status
err_status = onewire_reset(); // Reset onewire bus
if(err_status==0) // Check connection to DS1820
{
onewire_write_byte(0xCC); // Skip ROM
onewire_write_byte(0x44); // Start Conversion
// __delay_us(120); // Delay 120 us for state
onewire_reset(); // Restart
onewire_write_byte(0xCC); // Skip ROM
onewire_write_byte(0xBE); // Read Scratch Pad
temp_buff[0] = onewire_read_byte(); // Keep raw data
temp_buff[1] = onewire_read_byte(); // Keep raw data
}
return((temp_buff[1]<<8)+temp_buff[0]); // Return raw data
}
int i = 0, kn1 = 0, kn2 = 0, kn3 = 0,kn4=0,kn5=0,kn6=0,knplus = 0;
void pressure()
{
GODONE = 1; // Start conversion
while(GODONE); // Wait until conversion success
press = ADRESH<<2; //0-1020
}
//---------- Process ----------
void mainprocess()
{
// vak = 600; // 800 максимум
// gister = 100;
if (processID == 0)
{
PORTE = 0b000;
}
else if (processID == 1)
{
PORTE = 0b101; //Запустить насос закрыть сброса открыть перепуск
if (timetemp == 0) timetemp = sys1;
else if (sys1 - timetemp > 150)
{
timetemp = 0;
//Delay_ms(150);
PORTE = 0b110;
processID = 11;
}
}
else if (processID == 11)
{
// меряем давление
if (press >= vak)
{
PORTE = 0b000;
//if (TimeOpen == 0) TimeOpen = sys1;
// else if (sys1 - TimeOpen > 400)
//{
TimeOpen = 0;
Delay_ms(400);
PORTE = 0b011; // Отключили насос, открыли все клапана.
processID = 2;
//}
}
}
else if (processID == 2)
{
if (press <= gister)
{
PORTE = 0b000;
//if (TimeClose == 0) TimeClose = sys1;
// else if (sys1 - TimeClose > 450)
//{
TimeClose = 0;
Delay_ms(450);
PORTE = 0b001; // По достиж. нижнего давления закрыли перепуск открыли сброс
processID = 1;
//}
}
}
if (processID == 3)
{
if (press > 100) PORTE = 0b011;
//if (TimeStop == 0) TimeStop = sys1;
// else if (sys1 - TimeStop > 100)
// {
TimeStop = 0;
Delay_ms(100);
if (press < 100)
{
PORTE = 0b000;
processID = 0;
}
//}
}
}
unsigned char encoder1roll = 0, encoder2roll = 0;
void StepUp(void) {
encoder1roll = 1;
}
void StepDn(void) {
encoder1roll = 2;
}
void StepUp2(void) {
encoder2roll = 1;
}
void StepDn2(void) {
encoder2roll = 2;
}
//Инициализация дисплея в соответсвие с пунктом меню
void initDisplay(){
if (menuId == 0 ) {
//Основной дисплей!!
//Вывод вакум таймер и состояние, стоп пауза или работает
lcd_clear();
lcd_puts(128,(char *)"Разряжение:");
}
else if (menuId == 1 ) {
//Настройка вакума!!
lcd_clear();
lcd_puts(128,(char *)"Разряжение_");
}
else if (menuId == 2 ) {
//Настройка гистрезиса!!
lcd_clear();
lcd_puts(192,(char *)"Гистерезис_");
}
else if (menuId == 3 ) {
//Таймер верх!!
lcd_clear();
lcd_puts(128,(char *)"Таймер верх:");
}
else if (menuId == 4 ) {
//Таймер низ!!
lcd_clear();
lcd_puts(128,(char *)"Таймер низ:");
}
else if (menuId == 5 ) {
//Обороты вентилятра, температуры!!
lcd_clear();
lcd_puts(128,(char *)"Темп. насоса: ");
lcd_puts(192,(char *)"Обороты: ");
}
else if (menuId == 6 ) {
//Таймер отчета времени!!
lcd_clear();
lcd_puts(128,"Время работы");
}
else if (menuId == 7 ) {
//Установка Таймер верх!!
lcd_clear();
lcd_puts(128,(char *)"Таймер верх_");
utoa(temp,65,10);
lcd_puts(140,temp);
}
else if (menuId == 8 ) {
//Установка Таймер низ!!
lcd_clear();
lcd_puts(192,(char *)"Таймер нижн_");
}
else if (menuId == 9 ) {
lcd_clear();
lcd_puts(128,(char *)"Установка таймера");
}
}
/*
0 - Основной дисплей
1 - Настройка вакума
2 - Настройка гистрезиса
3 - Таймер верх
4 - Таймер низ
5 - Обороты вентилятра, температуры
6 - Таймер отчета времени
7 - Установка Таймер верх
8 - Установка Таймер низ
9 - Установка Таймер отчета времени
*/
unsigned char encoder1ButPrev = 1, encoder2ButPrev = 1;
unsigned char encoder1pressed = 0, encoder2pressed = 0;
void execEncoder1But(void) {
if (encoder1ButPrev==0 && RA3==1) {
//Кнопку отпустили после нажатия
encoder1pressed =1; //Подняли флаг что кнопка нажата
}
if (encoder1ButPrev != RA3) encoder1ButPrev = RA3;
if (encoder2ButPrev==0 && RC5==1) {
//Кнопку отпустили после нажатия
encoder2pressed =1; //Подняли флаг что кнопка нажата
}
if (encoder2ButPrev != RC5) encoder2ButPrev = RC5;
}
void inputProcess(){
unsigned char isIdle = 1; //Флаг простоя
unsigned char menuIdprev = menuId; //Запомним текущее меню
//Крутят энкодер1 ----------
if (encoder1roll) {
Sound(2000,10); // Sound 2000Hz,0.5 sec
isIdle = 0; //Сбрасываем флаг простоя
//Если мы не в вакуме и не в гистрезисе переходим в вакум
if (menuId!=1 && menuId!=2) menuId = 1;
if (menuId==1) {
//Меняем значение вакума!!!
vak += (encoder1roll==1)? 10 : -10;
}
if (menuId==2){
//Меняем значение гистрезиса!!!
gister += (encoder1roll==1)? 10 : -10;
}
encoder1roll = 0;
}
//<<----------
//Нажали энкодер1 ----------
if (encoder1pressed == 1)
{
Sound(2000,30); // Sound 2000Hz,0.5 sec
isIdle = 0; //Сбрасываем флаг простоя
//Если мы не в вакуме и не в гистрезисе переходим в вакум
if (menuId!=1 && menuId!=2) menuId = 1;
//Переключаемся между вакумом и гистрезисом
else menuId = (menuId==1)? 2 : 1;
encoder1pressed = 0;
}
//<<----------//Крутят энкодер2 ----------
if (encoder2roll)
{
Sound(2000,10); // Sound 2000Hz,0.5 sec
isIdle = 0; //Сбрасываем флаг простоя
//Если мы не в изменении значений по энкодеру 2
if (menuId!=7 && menuId!=8 && menuId!=9)
{
if (encoder2roll==1){
if (menuId==0 || menuId==10) menuId=3;
else if (menuId==3) menuId=4;
else if (menuId==4) menuId=5;
else menuId=0;
} else {
if (menuId==0 || menuId==10) menuId=5;
else if (menuId==3) menuId=0;
else if (menuId==4) menuId=3;
else if (menuId==5) menuId=4;
else menuId=5;
}
}
else
{
if (menuId==7) {
TimeUp += (encoder2roll==1)? 1 : -1;
//Меняем значение Таймер верх!!
}
else if (menuId==8)
{
//Меняем значение Таймер низ!!!
TimeDn += (encoder2roll==1)? 1 : -1;
}
else if (menuId==9)
{
TimeAll += (encoder2roll==1)? 1 : -1;
//Меняем значение Установка таймер отчета времени!!
}
}
encoder2roll = 0;
}
//<<----------
//Нажали энкодер2 ----------
if (encoder2pressed==1){
Sound(2000,30); // Sound 2000Hz,0.5 sec
isIdle = 0; //Сбрасываем флаг простоя
if (menuId==7 || menuId==8 || menuId==9) menuId = 0; //Переход в основной вывод
else {
if (menuId==0 || menuId==10) menuId = 9; //Переход в Установка таймер отчета времени
if (menuId==3) menuId = 7; //Переход в Установка таймер верх
if (menuId==4) menuId = 8; //Переход в Установка таймер низ
}
encoder2pressed = 0;
}
//<<----------
//Нажали кнопку старт ----------
if (RB2 == 0){
Sound(3000,30); // Sound 2000Hz,0.5 sec
isIdle = 0; //Сбрасываем флаг простоя
menuId = 0; //Переходим в основной дисплей
//Стартуем если нада
if (processID==0) processID=1; //Запуск со стопа
//Добавь в старт проверку даваления и если вакум есть,
//то открывай клапан и выжидай сборс
}
//<<----------
//Нажали кнопку пауза стоп ----------
if (RB1 == 0){
Sound(2000,30); // Sound 2000Hz,0.5 sec
isIdle = 0; //Сбрасываем флаг простоя
menuId = 0; //Переходим в основной дисплей
//Проверка и отработка стопа или паузы
processID = 0;
processID = 3;
}
//<<----------
//Простой
if (isIdle==0) idleTime = sys1; //Сбрасываем таймер простоя
if (sys1 - idleTime > 3000)
{
if (menuId!=0) menuId = 0; //Если долго не трогают меню перейти в основной дисплей
idleTime=sys1;
}
//Перерисуем дисплей в соответсвие с новым меню если нада
if (menuIdprev != menuId) initDisplay();
}
void redrawDisplay()
{
char v[10];
if (dispDel == 0) dispDel = sys1;
else if (sys1 - dispDel < 100) return;
dispDel = sys1;
if (menuId == 0 )
{
//Основной дисплей!!
//Вывод вакум таймер и состояние, стоп пауза или работает
itoa (v,press,10);
if (press >= 100) iclr = 0;
if (press < 100)
{
if (iclr == 0)
{
lcd_puts(140,(char *)" ");
iclr = 1;
}
}
if (press >= 10) iclr1 = 0;
if (press < 10)
{
if (iclr1 == 0)
{
lcd_puts(140,(char *)" ");
iclr1 = 1;
}
}
if (TimeLCD1 == 0) TimeLCD1 = sys1;
else if (sys1 - TimeLCD1 > 100)
{
TimeLCD1 = 0;
lcd_puts(140,v);
}
}
else if (menuId == 1 )
{
//Настройка вакума!!
//sprintf(v,"%ld ",vak);
if (TimeLCD1 == 0) TimeLCD1 = sys1;
else if (sys1 - TimeLCD1 > 200)
{
TimeLCD1 = 0;
utoa(v,vak,10);
lcd_puts(140,(char *)" ");
lcd_puts(140,v);
}
}
else if (menuId == 2 ) {
if (TimeLCD1 == 0) TimeLCD1 = sys1;
else if (sys1 - TimeLCD1 > 200)
{
TimeLCD1 = 0;
utoa(v,gister,10);
lcd_puts(204,(char *)" ");
lcd_puts(204,v);
}
//Настройка гистрезиса!!
}
else if (menuId == 3 ) {
// utoa(vtemp,TimeUp,10);
//lcd_puts(140,vtemp);
//Таймер верх!!
}
else if (menuId == 4 ) {
//Таймер низ!!
}
else if (menuId == 5 )
{
//lcd_puts(142,v);
//Обороты вентилятра, температуры!!
}
else if (menuId == 6 ) {
//Таймер отчета времени!!
}
else if (menuId == 7 ) {
//Установка Таймер верх!!
}
else if (menuId == 8 ) {
//Установка Таймер низ!!
}
else if (menuId == 9 ) {
//Установка Таймер отчета времени!!
}
}
void main()
{
lcd_init(); // Initial LCD
const unsigned char logo1 [18] = {0x3E, 0x3E, 0xA4, 0xE3, 0x70, 0x61, 0xB3, 0x63, 0xBF, 0xB3, 0x79, 0xB9, 0xBF, 0x65, 0x3C, 0x3C}; // Здравствуйте
lcd_puts(128,(char *)logo1);
TRISC2 = 0;
//---------- Блок шим ----------
STRA = 1; // Use P1A(RC1 pin)generate PWM output signal
// STRB = 0; // Use P1B(RD5 pin)generate invert PWM output signal
TRISC1 = 0; // Set RC1 output mode
// PWM2CON |= 0x3F; // Delay time 12.8 us нет в моем контроллере
CCP2CON = 0x8C; // CCP1 PWM mode,CCP1M3:CCP1M0=1100,P1M1:P1M0=10
PR2 = 0xFF; // Set Period counting
TMR2IF =0; // Ensure Clear overflow flag timer2
T2CON |= 0x01; // Prescaler 4
T2CON |= 0x04; // Start timer2
CCP2CON |= 0x30; // CCP1 PWM mode
// CCPR2L = 225;
char v[10];
//unsigned char VTemp[10];
unsigned int temp; // Keep raw temp.
T1CKPS0 = 1;
T1CKPS1 = 1;
TMR1CS = 0; // Use internal clock source
T1SYNC = 0; // Synchronize external clock input
// ANS8 = 0; // Set RB0 as digital port
//---------- для проса кнопок ----------
ANSEL=0;
ANSELH=0;
RBPU = 0;
TRISB = 0b11111111; // Set RB input mode
TRISE = 0b000;
PORTE = 0b000;
PORTB = 0b11111111;
//---------- Инит измерения вакуума ----------
TRISA = 0b111111; // Set RA2 input mode
RA1 = 0;
RA2 = 0;
// ANS2 = 1; // Set RA2 analog port
ADCON0 = 0b11000001; // Select RC Mode,ANS2 active,ADON=1
ADCON1 = 0b00001110;
//---------- для таймера ----------
TMR0 = 3;
T0CS = 0; // select internal clock
T0SE = 0; //Reacting low to high edge
PSA = 0; //Working with prescaler
PS0 = 1; //Prescale settings bit 0
PS1 = 1; //Prescale settings bit 1
PS2 = 1; //Prescale settings bit 2
T0IE = 1; // enable timer interrupt
// GIE = 1; // enable global interrupts
INTE = 1;
INTEDG = 1;
GIE = 1;
ANSELH = 0;
RBPU = 0;
lcd_clear();
Sound(3000,150); // Sound 2000Hz,0.5 sec
Sound(2000,50); // Sound 2000Hz,0.5 sec
Sound(1000,50); // Sound 2000Hz,0.5 sec
Sound(500, 50); // Sound 2000Hz,0.5 sec
lcd_puts(128,(char *)"Готов к работе!");
lcd_puts(192,(char *)"Прошивка V1.0");
//---------- ГЛАВНЫЙ ЦИКЛ ----------
while(1) // Infinite loop
{
unsigned char v1[10];
Encoder_Exe();
Encoder_Exe2();
execEncoder1But();
inputProcess();
redrawDisplay();
mainprocess();
//utoa(v1,PORTB,10);
//lcd_puts(128,v1);
unsigned long freq1 = freq * 30;
char freq_str[16];
// temp_str[16]; // Не пашет сука
sprintf(freq_str,"%ld ",freq1); // Convert frequency to string
temp = read_temp()>>1; // Read temp.
if (temp < 30)
{
it = 0;
RC2 = 0;
CCPR2L = 255;
}
else if (temp > 30 && temp < 40)
{
RC2 = 1;
CCPR2L = 255 - temp; // 1080 об/мин -1080
}
else if (temp > 40 && temp < 50)
{
RC2 = 1;
CCPR2L = 255 - temp*2; // 1590 об/мин - 1830
}
else if (temp > 50 && temp < 60)
{
RC2 = 1;
CCPR2L = 255 - temp*3; // 2370 об/мин - 2580
}
else if (temp > 60)
{
CCPR2L = 0; // 2880 об/мин
}
utoa(v,temp,10);
lcd_puts(142,v);
// lcd_puts(142,temp_str);
//---------- Вакуум меряем ----------
pressure();
press = 960 - press;
press = (press/10) * 10;
if (press < 0) press = 0;
//---------- Энкодер------------------------------------
}
}- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: MPLAB и русский беда.
std - это стандартная, pro - больная.
В новых компиляторах выбирают, в каком работать, как - не помню
я работаю в основном на 9.60 std pl3
Перенесите все объявления переменных вверх, это не с++
не
lcd_init(); // Initial LCD
const unsigned char logo1 [18] = {0x3E, 0x3E, 0xA4, 0xE3, 0x70, 0x61, 0xB3, 0x63, 0xBF, 0xB3, 0x79, 0xB9, 0xBF, 0x65, 0x3C, 0x3C}; // Здравствуйте
lcd_puts(128,(char *)logo1);
TRISC2 = 0;
char v[10];
а
char v[10];
const unsigned char logo1 [18] = {0x3E, 0x3E, 0xA4, 0xE3, 0x70, 0x61, 0xB3, 0x63, 0xBF, 0xB3, 0x79, 0xB9, 0xBF, 0x65, 0x3C, 0x3C}; // Здравствуйте
lcd_init(); // Initial LCD
lcd_puts(128,(char *)logo1);
Дальше, размер 1 функции желательно вместить в размер экрана монитора, у Вас читать невозможно.
В новых компиляторах выбирают, в каком работать, как - не помню
Перенесите все объявления переменных вверх, это не с++
не
lcd_init(); // Initial LCD
const unsigned char logo1 [18] = {0x3E, 0x3E, 0xA4, 0xE3, 0x70, 0x61, 0xB3, 0x63, 0xBF, 0xB3, 0x79, 0xB9, 0xBF, 0x65, 0x3C, 0x3C}; // Здравствуйте
lcd_puts(128,(char *)logo1);
TRISC2 = 0;
char v[10];
а
char v[10];
const unsigned char logo1 [18] = {0x3E, 0x3E, 0xA4, 0xE3, 0x70, 0x61, 0xB3, 0x63, 0xBF, 0xB3, 0x79, 0xB9, 0xBF, 0x65, 0x3C, 0x3C}; // Здравствуйте
lcd_init(); // Initial LCD
lcd_puts(128,(char *)logo1);
Дальше, размер 1 функции желательно вместить в размер экрана монитора, у Вас читать невозможно.
Re: MPLAB и русский беда.
urry писал(а):std - это стандартная, pro - больная.
В новых компиляторах выбирают, в каком работать, как - не помнюя работаю в основном на 9.60 std pl3
Дальше, размер 1 функции желательно вместить в размер экрана монитора, у Вас читать невозможно.
У меня просто монитор 24 дюйма с разрешением 1920Х1080 У меня даже еще много много места остается.
Я конечно размещаю так что бы все читалось.
Щас порядок наведу.
Re: MPLAB и русский беда.
Бесполезно куда не суешь не получается все равно
could not find space (101 bytes) for auto/param block
could not find space (101 bytes) for auto/param block
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: MPLAB и русский беда.
тогда Вам повезло с монитором больше.
Дальше, кстати, у Вас матерится на нехватку оперативки.
Почему - автосоздаваемые переменные размещаются только в 0 банке.
Распихайте их по банкам ручками.
bank1 char v[10];
например
Дальше, кстати, у Вас матерится на нехватку оперативки.
Почему - автосоздаваемые переменные размещаются только в 0 банке.
Распихайте их по банкам ручками.
bank1 char v[10];
например
Re: MPLAB и русский беда.
Уууу, блин! Огромное спасибо за помощь. Неделю бьюсь.
Все пошло как по маслу но все равно какие то проблемы с char
Заново объявленные не работают. Только те которые были когда то объявлены.
Хотя по памяти разпределил.
Все пошло как по маслу но все равно какие то проблемы с char
Заново объявленные не работают. Только те которые были когда то объявлены.
Хотя по памяти разпределил.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: MPLAB и русский беда.
что значит - не работают ?
забастовку объявили ?
короткий пример с демонстрацией трабла приведите.
забастовку объявили ?
короткий пример с демонстрацией трабла приведите.
Re: MPLAB и русский беда.
Код: Выделить всё
char time[10];
sprintf(time,"%d ",TimeUp);
lcd_puts(128,time);
Если вместо TimeUp ченить вручную прописать типа 123 не выводится на дисплей.
Если в puts прописать вместо time "123"
На дисплее 123
Причем где я только не объявляю char time[10]; и вверху самом и в теле void и не пашет.
В Watch выводишь time пусто, а если выводишь TimeUp то не пусто.
А еще в тупик воткнулся, занято 6100 кб Памяти или еще чего в пике я так понимаю. MPLAB умеет выводить емкость программы.
У меня виснет прошивка. Что делать. Как сам код распределить по банкам? Все переменные я закинул в банк1.
А само тело программы где располагается? Как его по банкам раскидать?
И что самое интересное проверял только что. Комментируешь пару функций, например.
lcd_puts(128,"писец памяти");
смотрю занято 5980. Прошивка запускается.
Завожу переменную например PS. Делаю в теле PS++; Памяти сразу например 6100. И прошива виснет.
В общем как только прога зашкаливает за 6100 все виснет.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: MPLAB и русский беда.
Код: Выделить всё
Если вместо TimeUp ченить вручную прописать типа 123 не выводится на дисплей.
У меня виснет прошивка. Что делать. Как сам код распределить по банкам? Все переменные я закинул в банк1.
А само тело программы где располагается? Как его по банкам раскидать?
Это неправильно. Но у меня нет Вашего компилятора проверить - кстати, подключая хидер <stdio.h> с функцией спринтф, Вы сразу теряете много памяти.
Погуглите лучше на тему итоа.
флеши вроде хватает, скорее всего, проблема в стеке, вернее, в его переполнении, посмотрите отладчиком границу стека.
Я здесь недавно давал совет на тему - поставить памятник 16ф84 и больше его не трогать...
Как бы не вижу смысла юзать дедушку 16ф877, если за те же деньги (кстати, дешевле!) можно взять 24ф16ка102 и не задумываться, в каком месте рушится стек и куда прятать переменные.
Применение пиков этой линейки -- малоножечные легкие варианты, аналогов чего у других производителей нет.
Ну имхо.
Re: MPLAB и русский беда.
utoa не подходит, там не затираются предыдущие знаки. Неудобно.
Ну я только с нуля изучаю это все. С опытом все получится.
Кстати в 16f887 все пины заняты у меня. Только под память внешнюю 2 пина свободны. Буду ее тоже использовать.
А нет еще RA5 , RA4 Свободны. Все остальное битком.
А посмотрел даташиту на 102 там мало. Ну конечно если будет другой какой то проект например термометр, то даже избыток. Смотря какие задачи
Ну я только с нуля изучаю это все. С опытом все получится.
Кстати в 16f887 все пины заняты у меня. Только под память внешнюю 2 пина свободны. Буду ее тоже использовать.
А нет еще RA5 , RA4 Свободны. Все остальное битком.
А посмотрел даташиту на 102 там мало. Ну конечно если будет другой какой то проект например термометр, то даже избыток. Смотря какие задачи
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: MPLAB и русский беда.
(с) Наш путь к вершине бесконечно труден...
То лбом об стену, то наоборот...
Макаревич.
Если бы вы потрудились посмотреть шит на другой контроллер , то наверняка обнаружили бы там больше ножек.Больше того, даже взяв какой - нить 18 пик (который я , кстати, не рекомендую) - ну например 18ф452 и приложили к Вашей плате, Вы увидели бы, что ножки совпадают. Ну это к слову.
Существует определенное количество граблей, на которые человек должен наступить лично.
Не мешаю больше.
То лбом об стену, то наоборот...
Макаревич.
Если бы вы потрудились посмотреть шит на другой контроллер , то наверняка обнаружили бы там больше ножек.Больше того, даже взяв какой - нить 18 пик (который я , кстати, не рекомендую) - ну например 18ф452 и приложили к Вашей плате, Вы увидели бы, что ножки совпадают. Ну это к слову.
Существует определенное количество граблей, на которые человек должен наступить лично.
Не мешаю больше.
Re: MPLAB и русский беда.
На счет граблей это однозначно.
Ну я конечно позже перелопачу все контроллеры какие есть. Я попробовал что это и теперь хоть знаю что то.
Ну я конечно позже перелопачу все контроллеры какие есть. Я попробовал что это и теперь хоть знаю что то.
Re: MPLAB и русский беда.
urry писал(а):(с) Наш путь к вершине бесконечно труден...
Если бы вы потрудились посмотреть шит на другой контроллер , то наверняка обнаружили бы там больше ножек.Больше того, даже взяв какой - нить 18 пик (который я , кстати, не рекомендую) - ну например 18ф452 и приложили к Вашей плате, Вы увидели бы, что ножки совпадают. Ну это к слову.
Не мешаю больше.
А как они могу совпадать если ножек больше??
У меня макетка только на 40 ног.
В будущем для AVR преобрету и тоже поизучаю и для Atiny. Надо все попробовать, у каждого свои особенности, и уже выбрать свое что то.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: MPLAB и русский беда.
я , собственно, имел в виду это, в доке
И ВЫ не выбираете, в чем вам писать...
Ну это крайняя моя к вам запись, как обещал
И ВЫ не выбираете, в чем вам писать...
Ну это крайняя моя к вам запись, как обещал
- Вложения
-
- Doc3.doc
- (427 КБ) 303 скачивания
-
kazmirchuk
- Родился
- Сообщения: 7
- Зарегистрирован: Чт окт 27, 2011 11:56:57
Запись пиков в mplab
Добрый день. Возникла производственная необходимость записывать пики в мплабе. Заранее прошу меня простить, если буду писать ерунду, т.к. о программировании имею весьма общее представление. На данный момент имеются: контупер, подключенный и заведомо рабочий программатор, мплаб 8.80, папка с программами, ну и собственно сами пики. Мой предшественник записывал именно эти программы и именно на этом программаторе, поэтому имею уверенность что все оно рабочее. Очень хотелось бы, чтобы мне пошагово объяснили порядок действий на примере, доупустим, 12F629. Файлы для записи имеют вот такой вид:

Буду очень признателен, если добрые люди мне помогут )

Буду очень признателен, если добрые люди мне помогут )
Re: Запись пиков в mplab
Открыть проект в MPLAB файлом с расширением .mcp .В МК записывают файлы с расширением .НЕХ или .hex . MPLAB- Debuger- выбираете свой программатор. Configure-Select Device- выбирате свой МК.
-
kazmirchuk
- Родился
- Сообщения: 7
- Зарегистрирован: Чт окт 27, 2011 11:56:57
Re: Запись пиков в mplab
Нажимаю project - open, в открывшемся окошке выбираю проэкт leds.mcp, нажимаю "открыть" и ничего не происходит. Вообще ничего