28.04.2014, 12:39
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.06.2008
Сообщений: 1,394
Сказал спасибо: 4
Сказали Спасибо 183 раз(а) в 167 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от ‹VenoM›
|
Имеется массив
|
Массив чего? Правильно - укказателей.
А вот сумма указателей (Arr[1] + Arr[2]) - это для чего Вам?
Может Вам нужна сумма *Arr[1]+*Arr[2] ?
|
|
|
|
28.04.2014, 13:00
|
|
Временная регистрация
Регистрация: 27.02.2012
Адрес: Николаев
Сообщений: 98
Сказал спасибо: 8
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Сообщение от Boba_spb
|
Может Вам нужна сумма *Arr[1]+*Arr[2] ?
|
Разумеется. Я пробовал так:
Код:
|
*Arr[11]=*(Arr[1]) + *(Arr[2]); |
Error [1142] type mismatch in '+' operator
|
|
|
|
28.04.2014, 13:10
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Указатели на флэш(ROM) головная боль CCS ...
__________________
Осторожно , злой кот
|
|
|
|
28.04.2014, 13:46
|
|
Временная регистрация
Регистрация: 27.02.2012
Адрес: Николаев
Сообщений: 98
Сказал спасибо: 8
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
не я ведь первый с такими вопросами
Выслушаю предложения.
|
|
|
|
07.05.2014, 14:28
|
|
Временная регистрация
Регистрация: 27.02.2012
Адрес: Николаев
Сообщений: 98
Сказал спасибо: 8
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Беда в том, что PICC18 туговато определяет типы данных, отсюда и некомпил.
Приходится выкручиваться так, выполняя действия почленно:
Код:
|
//k - индекс лемента структуры
//j - индекс массива k-го элемента структуры
Arr[11].A[j]=Arr[k].A[j]+Arr[k-1].A[j]; |
Последний раз редактировалось <VenoM>; 07.05.2014 в 14:35.
|
|
|
|
10.05.2014, 13:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Так и не победил Multiple Compilation Unit.
Создал для примера проектик.В настройках поставил Multiple
Compilation Units,выбрал 3 файла main,project,ds18b20.
файл project.h
Код:
|
#include ‹16F628A.h›
#FUSES NOWDT //No Watch Dog Timer
#FUSES PUT //Power Up Timer
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#use delay(crystal=20000000,restart_wdt)
typedef unsigned int8 uint;
typedef unsigned int16 ulong;
//кнопки
struct knopka_setup {
uint open; //контакт разомкнут
uint close; //контакт замкнут
} struct_setup,*ykaz_setup;
struct knopka_plus {
uint open; //контакт разомкнут
uint close; //контакт замкнут
} struct_plus,*ykaz_plus;
struct knopka_minus {
uint open; //контакт разомкнут
uint close; //контакт замкнут
} struct_minus,*ykaz_minus;
//уставки
struct ystavki {
uint temper;
uint interval;
uint on_off;
}struct_ystavki,*ykaz_ystavki; |
файл project.c
Код:
|
#import(FILE=main.o)
#import(FILE=ds18b20.o) |
файл main.c
Код:
|
#include "project.h"
#include "ds18b20.h"
void main()
{
while(TRUE)
{
restart_wdt();
output_low(PIN_A1);
}
} |
файл ds18b20.h пока пустой
файл ds18b20.c
Код:
|
#include "project.h"
#include "ds18b20.h"
//функции для работы с датчиком DS18B20
unsigned char OW_BUF[9];
//прототипы чтения crc
void read_crc();
char DLcrc8 (char *pData,char counterBytes );
char Check_Valid_Key(void);
#define PIN_DATA PIN_A4
#define TRIS_MASKA_LOW 0xEE
#define TRIS_MASKA_HIGH 0xFE
void bcd(unsigned int hislo)
{
int temp_bcd,temp_bcd2;
restart_wdt();
// подсчет сотен,десяток и единиц
sotni=hislo/100;
temp_bcd2=sotni*100;
temp_bcd=hislo-(temp_bcd2);
dec=temp_bcd/10;
edin=hislo-temp_bcd2-dec*10;
restart_wdt();
}
//сброс
void reset()
{
restart_wdt();
set_tris_A(TRIS_MASKA_LOW);
output_low(PIN_DATA);
delay_us(500);
set_tris_A(TRIS_MASKA_HIGH); //перевод на вход output_1w
//ожидание импульса присутствия от датчика
delay_us(55);
restart_wdt();
//ждем пока датчик освободит шину
delay_ms(1);
}
//выдача команды на DS18B20
void command_1w(int comm)
{
int n;
restart_wdt();
//передача начинается с младшего бита
for(n=0;n‹8;n++)
{
output_low(PIN_DATA);
if(comm&0x01)
output_high(PIN_DATA);
delay_us(60);
set_tris_A(TRIS_MASKA_HIGH);
//сдвиг вправо
comm››=1;
}
restart_wdt();
}
//чтение датчика
int read_1w()
{
int n,temp;
temp=0;
restart_wdt();
for(n=0;n‹8;n++)
{
temp››=1;
output_low(PIN_DATA);
set_tris_A(TRIS_MASKA_HIGH);
if(input(PIN_DATA))
temp|=0x80;
delay_us(60);
}
restart_wdt();
return temp;
}
void init_temp()
{
restart_wdt();
reset();
//запись в память,первые два байта все равно,третьий =00
//9 бит результат,конвертирование 100 мс
command_1w(0xcc);
command_1w(0x4e);//команда записи в память датчика
command_1w(0x00);
command_1w(0x00);
command_1w(0x00);
set_tris_A(0xff);
restart_wdt();
}
//функция считывая температуру и преобразование в нормальный вид
void read_temp()
{
int temp,MS_byte,LS_byte;
restart_wdt();
//проверка crc,потом считываем,если нет,то выключаем реле на тэны
crc=Check_Valid_Key();
reset();
command_1w(0xcc);
//command_1w(0xcc);//передаем команду конвертирования всем датчикам
command_1w(0xbe); //чтение памяти,нужны первые два байта
LS_byte=read_1w();
MS_byte=read_1w();
//---------------------------------------------
//пребразуем числа и присвоем своей структуре,в зависимости от датчика
LS_byte&=0xf0;
LS_byte››=4;
LS_byte&=0x0f;
temp=MS_byte;
MS_byte&=0x0f; //0x07=0000 0111
MS_byte‹‹=4;
restart_wdt();
if(temp&0xf0)
{
temp=0x01; //отриц температура
LS_byte=LS_byte|MS_byte;
LS_byte=(~LS_byte)+1;
}
else
{
temp=0; //положительная температура
LS_byte=LS_byte|MS_byte;
}
//теперь смотрим какой датчик и присваеваем определеной структуре
data=LS_byte;
znak=temp;
//здесь мы запускаем преобразование с дс18б20
reset();
command_1w(0xcc);
command_1w(0x44);
}
//Считываем девять бит из датчика,последний crc
void read_crc()
{
char i;
reset();
command_1w(0xcc);
command_1w(0xbe); //чтение памяти,нужны первые два байта
for(i=0;i‹9;i++)
{
OW_BUF[i]=read_1w(); //ложим в буфер для будущего подсчета
}
}
char DLcrc8 (char *pData,char counterBytes )
{
char crc;
char data;
char i,fb,st_byt;
crc =0; // Инициализируем
do // Просматриваем весь массив
{
data = *pData++; // Читаем байт
for (i=0;i‹8;i++) // счетчик битов в байте
{
fb =crc ^ data; //восемь бит,начинаем с конца с перевнутым полиномом
fb&=1; // 100110001,то есть будет 100011001,смотрим на младший бит
crc ››= 1; //если с датой обои
data ››=1;
if (fb == 1)crc^=0x8c;// полином, мля 1000 1100
}
}
while (counterBytes-- );
return crc;
}
char Check_Valid_Key(void)
{
//unsigned char i,CRC,temp;
CRC=0;
read_crc(); //чтение всех регистров
CRC=DLcrc8(OW_BUF,7); //функция вычисления контрольной суммы
if(CRC==OW_BUF[8])
return(1); //сравниваем теперь и если норм то возращается единичка
return(0);
} |
По отдельности из-под CCS модули я компилирую,а вот начинаю собирать полностью вылетает ошибка
Код:
|
*** Error 68 "C:\Documents and Settings\111\Мои документы\Загрузки\Example Files\test_mcu\$linker.c" Line 2(8,14): Duplicate function main()
*** Error 68 "C:\Documents and Settings\111\Мои документы\Загрузки\Example Files\test_mcu\$linker.c" Line 2(8,25): Duplicate function
2 Errors, 0 Warnings.
Build Failed. |
Русские пути не влияют,проект примера собираю по тому же пути.
Пытаюсь пере собрать проект тот же опять,вылетает ошибка:
Код:
|
*** Error 129 "project.c" Line 3(8,14): File can not be opened for write
C:\project_pic\test_mcu\project.o ===› 1 Errors, 0 Warnings.
Build Failed. |
Также посмотрел проект примера из CCS и мой сравнивая на предмет дерева файлов по модулям выглядит по разному.
У меня уже каша в голове от этого... Помогите опытные люди.Хочу программировать модулями.
Проект прикрепляю и скрины.
__________________
Глаза боятся,а руки делают.
|
|
|
|
12.05.2014, 18:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 11.06.2006
Адрес: 51° 46′ 0″ N, 55° 6′ 0″ E
Сообщений: 1,975
Сказал спасибо: 370
Сказали Спасибо 1,725 раз(а) в 706 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
#include "project.h"
#include "ds18b20.h"
Эти строчки я вижу в 2-х файлах.
|
|
|
|
13.05.2014, 05:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Собрался проект,просто убрал в настройках подключаемый файл project.c.Ведь там тока настройки для проекта.
Буду пробывать в мплаб_х и еще логически надо понимать что куда включается...
А вот как при компиляции их мплаб_х создаются файлы *.o ?
тупо копии кинул в папку с проектом мплаб_х.
__________________
Глаза боятся,а руки делают.
Последний раз редактировалось CERGEI1982; 13.05.2014 в 06:30.
|
|
|
|
13.05.2014, 08:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.01.2007
Адрес: Россия,Иркутская обл.
Сообщений: 2,579
Сказал спасибо: 351
Сказали Спасибо 315 раз(а) в 193 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Я как помню стек TCP/IP собран как раз модульно,надо вспоминать все.(было заброшено по личному)
__________________
Глаза боятся,а руки делают.
|
|
|
|
13.05.2014, 13:55
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,530
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
|
Re: Изучение PIC C Compiler(CCS C)
Стек от CCS у меня так нормально и не заработал. Я только прием UDP запустил. Впрочем, мне и не надо было больше. Правда, кривовато где-то как-то... Иногда глюк вылезает (нечасто, мож раз в месяц, а то и реже) - принимает напрочь битый пакет... А мож сам его корежит.
А микрочиповский стек нормально работает, но память жрет... В мой старенький 18F258 ничего не влезло.
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:16.
|
|