ايران ويج

نسخه‌ی کامل: مشکل در ارسال ودریافت داده باینری
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
کد php:
#include <mega32a.h>
#include <delay.h>

// Alphanumeric LCD functions
#include <alcd.h>
// Standard Input/Output functions
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// #include "Lib/FatByAbbas.c"
// #include <ff.h>

// Declare your global variables here
char dataX;
int cnt=0;
char buff[150];
char buff1[4];


// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVFvoid timer0_ovf_isr(void)
{
// Reinitialize Timer 0 value
TCNT0=0x8B;
// Place your code here
disk_timerproc();
    if(PINC.0==0)
    {
    lcd_clear();         
    lcd_putsf
("send data button pressed!");
    puts(buff);
    while(!PINC.0);
    };     
    
    
if(PINC.1==0)
    {               
    lcd_clear
();
    lcd_putsf("buffer cnt pos*");
    lcd_gotoxy(1,1);
    itoa(cnt,buff1);
    lcd_puts(buff1);
    delay_ms(50);
    lcd_gotoxy(7,1);
    itoa(strlen(buff),buff1);
    lcd_puts(buff1);
    while(!PINC.1);    
    
};          
}

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In 
DDRA=(0«DDA7) | (0«DDA6) | (0«DDA5) | (0«DDA4) | (0«DDA3) | (0«DDA2) | (0«DDA1) | (0«DDA0);
PORTA=(0«PORTA7) | (0«PORTA6) | (0«PORTA5) | (0«PORTA4) | (0«PORTA3) | (0«PORTA2) | (0«PORTA1) | (0«PORTA0);

cnt=0;

while (
1)
      {
      // Place your code here
      dataX getchar();
      if(cnt>150){
        lcd_putsf("Buffer Overflow!");
      }
       strcat(buff,&dataX);
       cnt++;        
      
}



تو قسمت حلقه بینهایت(while!1) تابع getchar داده رو از پورت سریال میخونه،تابع strcat داده دریافتیو تو اخرین خونه متغیر بافر می ریزه! نمیدونم مشکلش کجاس،text میفرستم مشکل نداره ولی binary موقع دریافت  کاراکترهایی که کد اسکی+شون 0 باشه در نظر نمیگیره(skip میکنه)


*اینم برنامه vb.net واسه ارسال فایل
کد php:
fpath "D:\cam.bmp"



        file1 FreeFile()
        FileOpen(file1fpathOpenMode.Binary)


        Do While Not EOF(file1)
            FileGet(file1inputData)
            Data1 += inputData
        Loop

        
For 1 To Len(Data1Step 50
            
If (50 Len(Data1)) Then
                Buffer1 
Mid(Data1i, (Len(Data1) - i))
                serial1.Write(Buffer1)
                Exit For
            Else
                Buffer1 Mid(Data1i50)
                serial1.Write(Buffer1)
            End If
        Next 
مقدار buff رو چطوری متوجه میشید توش چی هست؟

در c وقتی کاراکتری با کد 0x00 بیاد؛‌ به معنی پایان رشته هست؛ یعنی اگر تابعی بخواد اون رو چاپ کنه؛ تا جایی ادامه میده که به کاراکتر 0x00 برخورد کنه؛

-----
فکر کنم از puts استفاده کردید واسه دیدنش؛
این لینک رو بخونید:
http://www.cplusplus.com/reference/cstdio/puts/



نقل قول: The function begins copying from the address specified (str) until it reaches the terminating null character ('\0')
(۳۱-فروردین-۱۳۹۷, ۱۹:۴۶:۱۵)babyy نوشته است: [ -> ]مقدار buff رو چطوری متوجه میشید توش چی هست؟

در c وقتی کاراکتری با کد 0x00 بیاد؛‌ به معنی پایان رشته هست؛ یعنی اگر تابعی بخواد اون رو چاپ کنه؛ تا جایی ادامه میده که به کاراکتر 0x00 برخورد کنه؛

-----
فکر کنم از puts استفاده کردید واسه دیدنش؛
این لینک رو بخونید:
http://www.cplusplus.com/reference/cstdio/puts/



نقل قول: The function begins copying from the address specified (str) until it reaches the terminating null character ('\0')

Dim fpath as string
Dim file,i as integer
Dim ZeroCounter As integer

file1 = FreeFile()
        FileOpen(file1, fpath, OpenMode.Binary)
  Do While Not EOF(file1)
            FileGet(file1, inputData)
            Data1 += inputData
        Loop
  FileClose(file1)

  for i = 1 to len(data1)
   if (asc(mid(data1,i,1)) = 0 then
    ZeroCounter += 1    
   end if
  Next i  

  Msgbox(ZeroCounter,vbInformation,"Tedad 0 mojod dar file")