On 19.04.2015 04:15, Georg Icking-Konert wrote:
> hi all,
> 
> for the STM8 Discovery board I want to use Valentin's stm8flash tool
> (https://github.com/vdudouyt/stm8flash) for flashing via SWIM / ST-Link.
> This board has no UART<->USB connection and therefore cannot be
> programmed via UART boot loader —> need a SWIM tool
> 
> Unfortunately I wasn’t able to compile the tool on my Mac. Here's my
> steps with observations:
> 
>   * installed pkg-config and libusb via Homebrew --> worked
> 
>   * compile of stlink.c gave 
> 
>       o many warning messages like (ignored):
>         stlink.c:37:71: warning: passing 'char [32]' to parameter of
>         type 'unsigned char *' converts between pointers to integer
>         types with different sign [-Wpointer-sign]
>         --> suppose this is not critical...? Disabled all warnings
>         by CFLAGS += -w in Makefile
> 
>       o many error messages like (fixed):
>         /usr/local/Cellar/libusb/1.0.19/include/libusb-1.0/libusb.h:1696:10:
>         error: use of undeclared identifier ‚NULL'
>         --> fixed by #include <stddef.h> in stlink.c before #include
>         <libusb.h>
> 
>       o many error message like (open):
>         stlink.c:340:12: error: use of undeclared identifier ‚stderr'
>         fprintf(stderr, "Unknown status: %x\n", status);
>         In addition it warns that 
>         declaration of built-in function 'fprintf' requires inclusion of
>         the header <stdio.h>
>         --> it seems like the inclusion of <stdio.h> in line 4 of
>         stlink.c has no effect...  :-(
> 
>   * to make sure my toolchain is ok, I compiled a dummy program
>     with fprintf(stderr,"test"); and it was ok
> 
> —> I played around a lot but can't get that stdio.h error fixed.
> Apparently the compiler "forgets“ the stdio.h declarations completely
> and I have no clue, why…  :-( 
> 
> 
> Hardware Setup:
> 
>   * iMac running MacOS X 10.10.3
>   * "gcc -v“ yields:
>     Configured with:
>     --prefix=/Applications/Xcode.app/Contents/Developer/usr
>     --with-gxx-include-dir=/usr/include/c++/4.2.1
>     Apple LLVM version 6.1.0 (clang-602.0.49) (based on LLVM 3.6.0svn)
>     Target: x86_64-apple-darwin14.3.0
>     Thread model: posix
>   * HW works under Windows on a VirtualPC, i.e. STVD could flash & debug
>     the board on the same Mac and USB port
> 
> Anybody has idea what's going wrong, or maybe even succeeded in
> compiling the tool for MacOS X? For your help thanks a lot in advance!
> 
> Regards, 
> Georg Icking

Does the attached patch help?

Philipp

diff --git a/Makefile b/Makefile
index bac211b..c1951e2 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 .PHONY: all clean
 OBJECTS=stlink.o stlinkv2.o main.o byte_utils.o ihex.o stm8.o
-CFLAGS = `pkg-config --cflags libusb-1.0` -g -O0
+CFLAGS = `pkg-config --cflags libusb-1.0` -g -O0 --std=gnu99 --pedantic
 PLATFORM=$(shell uname -s)
 ifeq ($(PLATFORM),Darwin)
   CFLAGS += -I/usr/include/sys -I/usr/include/machine
diff --git a/main.c b/main.c
index 355d40f..bfca104 100644
--- a/main.c
+++ b/main.c
@@ -4,6 +4,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <strings.h>
 #include <unistd.h>
 #include <stdbool.h>
 #include <assert.h>
@@ -11,6 +12,7 @@
 #include "stlink.h"
 #include "stlinkv2.h"
 #include "stm8.h"
+#include "ihex.h"
 
 #ifdef __APPLE__
 extern char *optarg;
@@ -248,7 +250,7 @@ int main(int argc, char **argv) {
                fprintf(stderr, "Reading %d bytes at 0x%x... ", bytes_count, 
start);
                fflush(stderr);
         int bytes_count_align = ((bytes_count-1)/256+1)*256; // Reading should 
be done in blocks of 256 bytes
-               char *buf = malloc(bytes_count_align);
+               unsigned char *buf = malloc(bytes_count_align);
                if(!buf) spawn_error("malloc failed");
                int recv = pgm->read_range(pgm, part, buf, start, 
bytes_count_align);
         if(recv < bytes_count_align) {
@@ -266,7 +268,7 @@ int main(int argc, char **argv) {
                fflush(stderr);
 
         int bytes_count_align = ((bytes_count-1)/256+1)*256; // Reading should 
be done in blocks of 256 bytes
-               char *buf = malloc(bytes_count_align);
+               unsigned char *buf = malloc(bytes_count_align);
                if(!buf) spawn_error("malloc failed");
                int recv = pgm->read_range(pgm, part, buf, start, 
bytes_count_align);
         if(recv < bytes_count_align) {
@@ -276,7 +278,7 @@ int main(int argc, char **argv) {
 
                if(!(f = fopen(filename, "r")))
                        spawn_error("Failed to open file");
-               char *buf2 = malloc(bytes_count);
+               unsigned char *buf2 = malloc(bytes_count);
                if(!buf2) spawn_error("malloc failed");
                int bytes_to_verify;
                /* reading bytes to RAM */
@@ -306,7 +308,7 @@ int main(int argc, char **argv) {
                if(!(f = fopen(filename, "r")))
                        spawn_error("Failed to open file");
         int bytes_count_align = 
((bytes_count-1)/part->flash_block_size+1)*part->flash_block_size;
-               char *buf = malloc(bytes_count_align);
+               unsigned char *buf = malloc(bytes_count_align);
                if(!buf) spawn_error("malloc failed");
         memset(buf, 0, bytes_count_align); // Clean aligned buffer
                int bytes_to_write;
diff --git a/pgm.h b/pgm.h
index 1a783ab..c04fb49 100644
--- a/pgm.h
+++ b/pgm.h
@@ -29,8 +29,8 @@ typedef struct programmer_s {
        bool (*open) (struct programmer_s *pgm);
        void (*close) (struct programmer_s *pgm);
        void (*reset) (struct programmer_s *pgm);
-       int (*read_range) (struct programmer_s *pgm, stm8_device_t *device, 
char *buffer, unsigned int start, unsigned int length);
-       int (*write_range) (struct programmer_s *pgm, stm8_device_t *device, 
char *buffer, unsigned int start, unsigned int length, const memtype_t memtype);
+       int (*read_range) (struct programmer_s *pgm, stm8_device_t *device, 
unsigned char *buffer, unsigned int start, unsigned int length);
+       int (*write_range) (struct programmer_s *pgm, stm8_device_t *device, 
unsigned char *buffer, unsigned int start, unsigned int length, const memtype_t 
memtype);
 
        /* Private */
        libusb_device_handle *dev_handle;
@@ -41,7 +41,8 @@ typedef struct programmer_s {
 
 typedef bool (*pgm_open_cb)(programmer_t *);
 typedef void (*pgm_close_cb)(programmer_t *);
-typedef int (*pgm_read_range_cb)(programmer_t *, char *, unsigned int, 
unsigned int);
-typedef int (*pgm_write_range_cb)(programmer_t *, char *, unsigned int, 
unsigned int);
+typedef int (*pgm_read_range_cb)(programmer_t *, unsigned char *, unsigned 
int, unsigned int);
+typedef int (*pgm_write_range_cb)(programmer_t *, unsigned char *, unsigned 
int, unsigned int);
 
 #endif
+
diff --git a/stlink.c b/stlink.c
index d625fab..440aa77 100644
--- a/stlink.c
+++ b/stlink.c
@@ -9,13 +9,14 @@
 #include <stdbool.h>
 #include <stdarg.h>
 #include <endian.h>
+#include <unistd.h>
 #include "stm8.h"
 #include "pgm.h"
 #include "stlink.h"
 #include "utils.h"
 
-#define STLK_FLAG_ERR 0b00000001
-#define STLK_FLAG_BUFFER_FULL 0b00000100
+#define STLK_FLAG_ERR 0x01
+#define STLK_FLAG_BUFFER_FULL 0x04
 #define STLK_READ_BUFFER_SIZE 6144
 #define STLK_MAX_WRITE 512
 
@@ -25,7 +26,7 @@ int stlink_swim_write_byte(programmer_t *pgm, unsigned char 
byte, unsigned int s
 
 void stlink_send_message(programmer_t *pgm, int count, ...) {
        va_list ap;
-       char data[32];
+       unsigned char data[32];
        int i, r, actual;
 
        va_start(ap, count);
@@ -40,7 +41,7 @@ void stlink_send_message(programmer_t *pgm, int count, ...) {
        return;
 }
 
-int stlink_read(programmer_t *pgm, char *buffer, int count) {
+int stlink_read(programmer_t *pgm, unsigned char *buffer, int count) {
        int r, recv;
        r = libusb_bulk_transfer(pgm->dev_handle, (1 | LIBUSB_ENDPOINT_IN), 
buffer, count, &recv, 0);
        assert(r==0);
@@ -48,13 +49,13 @@ int stlink_read(programmer_t *pgm, char *buffer, int count) 
{
 }
 
 int stlink_read1(programmer_t *pgm, int count) {
-       char buf[16];
+       unsigned char buf[16];
        return(stlink_read(pgm, buf, count));
 }
 
 int stlink_read_and_cmp(programmer_t *pgm, int count, ...) {
        va_list ap;
-       char buf[16];
+       unsigned char buf[16];
        int recv = stlink_read(pgm, buf, count);
        int i, ret = 0;
        va_start(ap, count);
@@ -65,28 +66,28 @@ int stlink_read_and_cmp(programmer_t *pgm, int count, ...) {
        return(ret);
 }
 
-char *pack_int16(uint16_t word, char *out) {
+unsigned char *pack_int16(uint16_t word, unsigned char *out) {
        // Filling with bytes in big-endian order
        out[0] = (word & 0xff00) >> 8;
        out[1] = (word & 0x00ff);
        return(out+2);
 }
 
-uint16_t unpack_int16_le(char *block) {
+uint16_t unpack_int16_le(unsigned char *block) {
        uint32_t ret;
        ret = *(block + 1) << 8;
        ret += *(block + 0);
        return(ret);
 }
 
-uint16_t unpack_int16(char *block) {
+uint16_t unpack_int16(unsigned char *block) {
        uint32_t ret;
        ret = *(block + 0) << 8;
        ret += *(block + 1);
        return(ret);
 }
 
-char *pack_int32(uint32_t word, char *out) {
+unsigned char *pack_int32(uint32_t word, unsigned char *out) {
        out[0] = (word & 0xff000000) >> 24;
        out[1] = (word & 0x00ff0000) >> 16;
        out[2] = (word & 0x0000ff00) >> 8;
@@ -94,7 +95,7 @@ char *pack_int32(uint32_t word, char *out) {
        return(out+4);
 }
 
-char *pack_int32_le(uint32_t word, char *out) {
+unsigned char *pack_int32_le(uint32_t word, unsigned char *out) {
        // Filling with bytes in little-endian order
        out[0] = (word & 0x000000ff);
        out[1] = (word & 0x0000ff00) >> 8;
@@ -103,7 +104,7 @@ char *pack_int32_le(uint32_t word, char *out) {
        return(out+4);
 }
 
-uint32_t unpack_int32(char *block) {
+uint32_t unpack_int32(unsigned char *block) {
        uint32_t ret;
        ret  = *(block + 0) << 24;
        ret += *(block + 1) << 16;
@@ -112,7 +113,7 @@ uint32_t unpack_int32(char *block) {
        return(ret);
 }
 
-uint32_t unpack_int32_le(char *block) {
+uint32_t unpack_int32_le(unsigned char *block) {
        uint32_t ret;
        ret  = *(block + 3) << 24;
        ret += *(block + 2) << 16;
@@ -121,8 +122,8 @@ uint32_t unpack_int32_le(char *block) {
        return(ret);
 }
 
-void pack_usb_cbw(scsi_usb_cbw *cbw, char *out) {
-       char *offset = out;
+void pack_usb_cbw(scsi_usb_cbw *cbw, unsigned char *out) {
+       unsigned char *offset = out;
        offset = pack_int32(cbw->signature, offset);
        offset = pack_int32(cbw->tag, offset);
        offset = pack_int32_le(cbw->transfer_length, offset);
@@ -135,7 +136,7 @@ void pack_usb_cbw(scsi_usb_cbw *cbw, char *out) {
        assert(offset - out == USB_CBW_SIZE);
 }
 
-void unpack_usb_csw(char *block, scsi_usb_csw *out) {
+void unpack_usb_csw(unsigned char *block, scsi_usb_csw *out) {
        out->signature = unpack_int32(block);
        out->tag = unpack_int32(block + 4);
        out->data_residue = unpack_int32_le(block + 8);
@@ -304,7 +305,7 @@ void stlink_finish_session(programmer_t *pgm) {
 }
 
 unsigned int stlink_swim_get_status(programmer_t *pgm) {
-       char buf[4];
+       unsigned char buf[4];
        stlink_cmd(pgm, 4, buf, 0x80, 0x0a,
                        0xf4, 0x09,
                        0x01, 0x00,
@@ -315,7 +316,7 @@ unsigned int stlink_swim_get_status(programmer_t *pgm) {
 }
 
 bool stlink_open(programmer_t *pgm) {
-       char buf[18];
+       unsigned char buf[18];
        pgm->out_msg_size = 31;
        stlink_test_unit_ready(pgm);
        stlink_cmd(pgm, 0x06, buf, 0x80, 6, 0xf1, 0x80, 0x00, 0x00, 0x00, 0x00);
@@ -357,7 +358,7 @@ void stlink_swim_srst(programmer_t *pgm) {
 }
 
 int stlink_swim_write_byte(programmer_t *pgm, unsigned char byte, unsigned int 
start) {
-       char buf[4], start2[2];
+       unsigned char buf[4], start2[2];
        int result, tries = 0;
        pack_int16(start, start2);
        DEBUG_PRINT("stlink_swim_write_byte\n");
@@ -390,14 +391,14 @@ int stlink_swim_write_byte(programmer_t *pgm, unsigned 
char byte, unsigned int s
        return(result);
 }
 
-int stlink_swim_read_range(programmer_t *pgm, stm8_device_t *device, char 
*buffer, unsigned int start, unsigned int length) {
-       char buf[4];
+int stlink_swim_read_range(programmer_t *pgm, stm8_device_t *device, unsigned 
char *buffer, unsigned int start, unsigned int length) {
+       unsigned char buf[4];
        DEBUG_PRINT("stlink_swim_read_range\n");
        stlink_init_session(pgm);
        stlink_swim_write_byte(pgm, 0x00, device->regs.CLK_CKDIVR); // mov 
0x00, CLK_DIVR
        int i;
        for(i = 0; i < length; i += STLK_READ_BUFFER_SIZE) {
-               char block_start2[2], block_size2[2];
+               unsigned char block_start2[2], block_size2[2];
                int block_start = start + i;
                // Determining block size
                int block_size = length - i;
@@ -440,7 +441,7 @@ int stlink_swim_wait(programmer_t *pgm) {
        return(result);
 }
 
-int stlink_swim_write_block(programmer_t *pgm, char *buffer,
+int stlink_swim_write_block(programmer_t *pgm, unsigned char *buffer,
                        unsigned int start,
                        unsigned int length,
                        unsigned int padding
@@ -448,7 +449,7 @@ int stlink_swim_write_block(programmer_t *pgm, char *buffer,
        int length1 = 8 - padding; // Amount to be transferred with CBW
        int length2 = length - 8 + padding; // Amount to be transferred with 
additional transfer
        if (length2 < 0) length2 = 0;
-       char block_size2[2], block_start2[2];
+       unsigned char block_size2[2], block_start2[2];
        pack_int16(start, block_start2);
        pack_int16(length, block_size2);
        // Some logical checks
@@ -473,7 +474,7 @@ int stlink_swim_write_block(programmer_t *pgm, char *buffer,
        usleep(3000);
        if(length2) {
                // Sending the rest
-               char tail[STLK_MAX_WRITE-6];
+               unsigned char tail[STLK_MAX_WRITE-6];
                memcpy(tail, buffer + length1, length2);
                if(padding) tail[length2] = '\1';
                int actual;
@@ -495,7 +496,7 @@ int stlink_swim_write_block(programmer_t *pgm, char *buffer,
        return(result);
 }
 
-int stlink_swim_write_range(programmer_t *pgm, stm8_device_t *device, char 
*buffer, unsigned int start, unsigned int length, const memtype_t memtype) {
+int stlink_swim_write_range(programmer_t *pgm, stm8_device_t *device, unsigned 
char *buffer, unsigned int start, unsigned int length, const memtype_t memtype) 
{
        int i;
        stlink_init_session(pgm);
        stlink_swim_write_byte(pgm, 0x00, device->regs.CLK_CKDIVR);
@@ -515,7 +516,7 @@ int stlink_swim_write_range(programmer_t *pgm, 
stm8_device_t *device, char *buff
     }
     int flash_block_size = device->flash_block_size;
        for(i = 0; i < length; i+=flash_block_size) {
-               char block[128];
+               unsigned char block[128];
                memset(block, 0, sizeof(block));
                int block_size = length - i;
                if(block_size > flash_block_size)
diff --git a/stlink.h b/stlink.h
index 322b89d..7ec9916 100644
--- a/stlink.h
+++ b/stlink.h
@@ -50,7 +50,7 @@ typedef struct _scsi_usb_csw {
 bool stlink_open(programmer_t *pgm);
 void stlink_close(programmer_t *pgm);
 void stlink_swim_srst(programmer_t *pgm);
-int stlink_swim_read_range(programmer_t *pgm, stm8_device_t *device, char 
*buffer, unsigned int start, unsigned int length);
-int stlink_swim_write_range(programmer_t *pgm, stm8_device_t *device, char 
*buffer, unsigned int start, unsigned int length, const memtype_t memtype);
+int stlink_swim_read_range(programmer_t *pgm, stm8_device_t *device, unsigned 
char *buffer, unsigned int start, unsigned int length);
+int stlink_swim_write_range(programmer_t *pgm, stm8_device_t *device, unsigned 
char *buffer, unsigned int start, unsigned int length, const memtype_t memtype);
 
 #endif
diff --git a/stlinkv2.c b/stlinkv2.c
index f36e6c1..53145f6 100644
--- a/stlinkv2.c
+++ b/stlinkv2.c
@@ -6,21 +6,24 @@
 #include <stdbool.h>
 #include <stdarg.h>
 #include <string.h>
+#include <unistd.h>
 #include "stlink.h"
 #include "error.h"
 #include "try.h"
 #include "byte_utils.h"
 #include "stlinkv2.h"
 
+unsigned char *pack_int16(uint16_t word, unsigned char *out);
+
 #define STLK_READ_BUFFER_SIZE 6144
 
-char cmd_buf[16];
+unsigned char cmd_buf[16];
 
 unsigned int stlink2_get_status(programmer_t *pgm);
 int stlink2_write_byte(programmer_t *pgm, unsigned char byte, unsigned int 
start);
 int stlink2_write_and_read_byte(programmer_t *pgm, unsigned char byte, 
unsigned int start);
 
-static unsigned int msg_transfer(programmer_t *pgm, char *buf, unsigned int 
length, int direction) {
+static unsigned int msg_transfer(programmer_t *pgm, unsigned char *buf, 
unsigned int length, int direction) {
        int bytes_transferred;
        int ep = (direction == LIBUSB_ENDPOINT_OUT) ? 2 : 1;
        libusb_bulk_transfer(pgm->dev_handle, ep | direction, buf, length, 
&bytes_transferred, 0);
@@ -28,21 +31,21 @@ static unsigned int msg_transfer(programmer_t *pgm, char 
*buf, unsigned int leng
        return bytes_transferred;
 }
 
-static unsigned int msg_send(programmer_t *pgm, char *buf, unsigned int 
length) {
+static unsigned int msg_send(programmer_t *pgm, unsigned char *buf, unsigned 
int length) {
        return msg_transfer(pgm, buf, length, LIBUSB_ENDPOINT_OUT);
 }
 
-static unsigned int msg_recv(programmer_t *pgm, char *buf, unsigned int 
length) {
+static unsigned int msg_recv(programmer_t *pgm, unsigned char *buf, unsigned 
int length) {
        return msg_transfer(pgm, buf, length, LIBUSB_ENDPOINT_IN);
 }
 
 static void msg_recv0(programmer_t *pgm, unsigned int length) {
-       char buf[64];
+       unsigned char buf[64];
        msg_recv(pgm, buf, length);
 }
 
 static unsigned int msg_recv_int(programmer_t *pgm, unsigned int length) {
-       char buf[4];
+       unsigned char buf[4];
        msg_recv(pgm, buf, length);
        return load_int(buf, length, MP_LITTLE_ENDIAN);
 }
@@ -51,7 +54,7 @@ static unsigned int msg_recv_int8(programmer_t *pgm) {        
return msg_recv_int(pgm,
 static unsigned int msg_recv_int16(programmer_t *pgm) {        return 
msg_recv_int(pgm, 2); }
 static unsigned int msg_recv_int32(programmer_t *pgm) {        return 
msg_recv_int(pgm, 4); }
 
-static void msg_init(char *out, unsigned int cmd) {
+static void msg_init(unsigned char *out, unsigned int cmd) {
        memset(out, 0, 16);
        format_int(out, cmd, 2, MP_BIG_ENDIAN);
 }
@@ -131,7 +134,7 @@ void stlink2_finish_session(programmer_t *pgm) {
 }
 
 int stlink2_write_byte(programmer_t *pgm, unsigned char byte, unsigned int 
start) {
-       char buf[4], start2[2];
+       unsigned char buf[4], start2[2];
        pack_int16(start, start2);
        stlink2_cmd(pgm, 0xf40a, 7,
                        0x00, 0x01,
@@ -143,7 +146,7 @@ int stlink2_write_byte(programmer_t *pgm, unsigned char 
byte, unsigned int start
 }
 
 int stlink2_write_word(programmer_t *pgm, unsigned int word, unsigned int 
start) {
-       char buf[4], start2[2];
+       unsigned char buf[4], start2[2];
        pack_int16(start, start2);
        stlink2_cmd(pgm, 0xf40a, 8,
                        0x00, 0x02,
@@ -155,7 +158,7 @@ int stlink2_write_word(programmer_t *pgm, unsigned int 
word, unsigned int start)
 }
 
 int stlink2_write_and_read_byte(programmer_t *pgm, unsigned char byte, 
unsigned int start) {
-       char buf[4], start2[2];
+       unsigned char buf[4], start2[2];
        pack_int16(start, start2);
        stlink2_cmd(pgm, 0xf40b, 7,
                        0x00, 0x01,
@@ -174,7 +177,7 @@ unsigned int stlink2_get_status(programmer_t *pgm) {
        return msg_recv_int32(pgm);
 }
 
-int stlink2_swim_read_range(programmer_t *pgm, stm8_device_t *device, char 
*buffer, unsigned int start, unsigned int length) {
+int stlink2_swim_read_range(programmer_t *pgm, stm8_device_t *device, unsigned 
char *buffer, unsigned int start, unsigned int length) {
        stlink2_init_session(pgm);
 
        int i;
@@ -205,7 +208,7 @@ void stlink2_wait_until_transfer_completes(programmer_t 
*pgm, stm8_device_t *dev
        TRY(8, stlink2_write_and_read_byte(pgm, 0x82, device->regs.FLASH_IAPSR) 
& 0x4);
 }
 
-int stlink2_swim_write_range(programmer_t *pgm, stm8_device_t *device, char 
*buffer, unsigned int start, unsigned int length, const memtype_t memtype) {
+int stlink2_swim_write_range(programmer_t *pgm, stm8_device_t *device, 
unsigned char *buffer, unsigned int start, unsigned int length, const memtype_t 
memtype) {
        stlink2_init_session(pgm);
 
        stlink2_write_byte(pgm, 0x00, device->regs.CLK_CKDIVR);
diff --git a/stlinkv2.h b/stlinkv2.h
index 0c1155e..6219e4a 100644
--- a/stlinkv2.h
+++ b/stlinkv2.h
@@ -5,7 +5,7 @@
 
 bool stlink2_open(programmer_t *pgm);
 void stlink2_srst(programmer_t *pgm);
-int stlink2_swim_read_range(programmer_t *pgm, stm8_device_t *device, char 
*buffer, unsigned int start, unsigned int length);
-int stlink2_swim_write_range(programmer_t *pgm, stm8_device_t *device, char 
*buffer, unsigned int start, unsigned int length, const memtype_t memtype);
+int stlink2_swim_read_range(programmer_t *pgm, stm8_device_t *device, unsigned 
char *buffer, unsigned int start, unsigned int length);
+int stlink2_swim_write_range(programmer_t *pgm, stm8_device_t *device, 
unsigned char *buffer, unsigned int start, unsigned int length, const memtype_t 
memtype);
 
 #endif
------------------------------------------------------------------------------
BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
Develop your own process in accordance with the BPMN 2 standard
Learn Process modeling best practices with Bonita BPM through live exercises
http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_
source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to