数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 35985|回复: 211

[Arduino] Arduino for C51 正式开源发布(一) 快速启动指南

    [复制链接]
发表于 2019-7-30 09:02:59 | 显示全部楼层 |阅读模式
第一部分:安装及快速启动


    1.已安装arduno IDE,直接至步2,否则在arduino管网上下载最新arduino ide,并安装且能正确运行无误;
    2.在我共享给坛友的百度网盘上下载:read.txt 文件,这是一个包含最新内容的说明文档,如和本文不一致,以该文档为准;阅后下载压缩包:sduino.rar;
    3.打开sduino.rar, 将压缩包中sduino文件夹拖放到 arduino->hardware 文件夹中; 该包含已mcs51 系列 arduino core 和 更新到最新版本的stm8  支持;如有老的stm8 sduino 则先删除旧版本;(按下图操作)
   

   4.如已经安装过我EFM32/STM32/LM3S/NUVOTON ARM 版本的坛友可跳过以下 5 部分,直接第6步;否则下载另一个包:tools.rar
   5.tools.rar 包含了stlink/和nulink ice命令行版本,前者用于 stm8,后者用于 n76e003和ML51的上传;由于这些工具是和arm core共享的,因此也需将包中 tools文件夹拖放到 arduino->hardware 文件夹中:


   6.再次运行arduino,应该能看到支持的mcs51系列芯片和stm8芯片的选择菜单;
   7.其它:请关注SDCC 官网:http://sdcc.sourceforge.net/  发布的最新版本,下载后解压,并替换 arduino/hardware/sduino/tools/sdcc 同名全部内容,当前已经是最新版本 build 3.9.0



第二部分:工具菜单选项:


一/二、选择目标板子和芯片:

    1.Board(系列):


    2.Processor(板/处理器) :


      首先选择系列(Board),接着理器(Processor) 中选择对应系列的芯片/板子,如 Nuvoton ML51 系列 / NuMaker_ML51PC 板(芯片)
    当前已支持并加入菜单的芯片系列如下:
          NUVOTON :N76E003
                             ML51PC/D
         STC:             STC8A/F
                                STC12C5A/LE5A
                                STC12C56/54/STC12LE56/54
                                STC15F/L/W
                                STC89CxRC/RD+
          SILICON: C8051Fxxx
          AT     : AT89C51/52
         
      以后还会增加更多的芯片如:
          TI CC1110/2430/2510/2530
          CY7C68XXX
         


三、确定时钟源及频率:

    3.Clock source(时钟源):
    4.OSC  Speed(晶振频率):
    5.CPU Speed(CPU速度)


     必须选择正确的时钟源和CPU速度,这影响到通信速率如 uart/spi/iic和定时器的准确度,也影响PWM的频率;
      时钟源有内部RC振荡器和外部晶振(如有可选用),如果你板子上的的外部晶振和菜单上显示的不一致,可修改boards.txt 文件;
      STC内部RC频率注意,这个频率值一定要和STC_ISP下载时选择的参数一致,并且点上[在程序区的结束处添加重要测试参数];
     不同板子这些菜单选项项目数和内容有所不同。


四、确定代码的内存模式:

    6.Mode(内存模式): 生成的代码可选以下三个模式之一:small/medium/large;


    补充下知识:内存模式决定了未明确指定存储类型的变量放在何处的缺省存储区域,其中small 都放在idata,medium为pdata(1 页),而large则为xdata,因此当在small模式下编译出现超内存错误的情形可以试试large模式,或将比较大的数组指定使用外部存储器__xdata;



五、需要连接的整数运算库:

    7.Link libs:


        SDCC 对于整数运算,分别提供了int/long/long_long三个库,对应的是 16/32/64 位整数运算,菜单提供了两个选项,即:



         全部   int+long+long_long 支持 全部整数运行,long_long模式既耗费时间也耗费内存资源;
         和部分 int+long, 仅支持 8/16/32 整数运算,因为大多数应用不会用到8字节64整数运算,可节约内存;


六、浮点运算:

   8.float lib:


   SDCC51 将浮点运算放在一个单独的库中,因此,我们用到浮点运算,就需要连接该库;浮点运算和64位整数运算一样耗费较多的机时和内存资源,因此提供该选项;
   64 位 long_long int 整数运算库和float 浮点运算库sdcc都是独立的库,这样我们可以决定是否连接,这取决于我们是否用到了这些运算功能,不使用可节约内存。

七、串口选择:

   9.Serial communication: 许多芯片有多个串口及不同的波特率生成方式,可供选择,同时,应用中如同时需用到定时器,则需要注意不要引起资源冲突;


八、 printf 使用:

   10.printf use

     由于SDCC不支持C++,因此SDUINO采用了一组系列函数来代替arduino的 Serial.print() 和 Serial.println(),我不喜欢这样,增加了对标准printf的支持,相信大家都会用,不用去了解这一组函数 :
     Serial_print_xx() 和 Serial.println_xx(), 直接用C标准库函数printf,或 arduino 方式 Serial.printf;但SDCC并未全部支持全部格式输出,提供了不同的库函数来支持,它们分别是:
     printf/printf_fast/printf_fast_f/printf_small/printf_tiny/来兼顾 需要内存开销
     因此我这里也提供这样的选项,来指定 Serial.printf调用那个函数;auto 选项则根据 8 是否连接浮点库来缺省选择printf_fast_f/printf_fast
     该选项不影响库 printf/printf_fast/printf_fast_f/printf_small/printf_tiny/及 Sduino  Serial_print_xx() 和 Serial_println_xx()的使用;

九、供电电压:

   11.VCC volts:51 芯片有不同的供电电压,这对生成代码没有影响,但如果我们在ADC中采用VCC为参考电压,则需要提供该电压值,这里提供了宏定义 POWER_VCC 的毫伏值来供应用程序使用,缺省值是定义在pins_arduino.h中;
     系统中并未用到该定义,


十、上传更新方法:

   12.upload methed: 51 不同系列的芯片采用不同的flash上传方法,如 Nuvoton可以用 ice 或 串口bootload,而 stc 则用 stcisp/stc_isp(IDE),这部分最最复杂的,因为不同的mcu上传方法接口都不同,而且需要使用命令行版本;因此仍然需要不断完善;





十一、当前选项摘要:

上述选项,都会在底部状态行上显示选项的摘要:


编译一个空的 sketch,如能看到这样的编译信息,则恭喜你,安装启动成功!

下一步,我们就可以点灯试试了,  内容较多,只能边写,边完善,敬请谅解和等待!
百度网盘:https://pan.baidu.com/s/1i48rVNJ


next

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 25家元 +451 收起 理由
信徒1102 + 2 優秀文章
llcc + 20
eros8269 + 20
人艰不拆了 + 20
wpppmlah + 10 優秀文章
liaozheny + 20 優秀文章
jf201006 + 18 謝謝分享
杨雪飞 + 20 这个才是真正的技术贴
jtcat + 15 優秀文章
沙漠臭屁虫 + 16

查看全部打赏

 楼主| 发表于 2019-7-31 21:15:01 | 显示全部楼层
kkstun 发表于 2019-7-31 21:04
不知能否放github上 大家共同研究呢

现在是测试阶段,基本排除错误后,会上传到 github.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-31 23:57:39 | 显示全部楼层
本帖最后由 huaweiwx 于 2019-8-1 16:50 编辑

第三部分:引脚编号, arduino for 51 采用格式为 Pa_b,其中 a是端口号,b 是bit位号,如 P0_1

arduino 采用对全部引脚按 序数 1,2,3,....这样的方式,优点是封装端口及bit位,让使用者在应用层面和硬件层作了隔离,应用时可以不管端口和位,但缺点是明显的:
1 需要保存一个数字(脚号)和对应实际端口的对照表,这样既要多开销存储空间,也要多开销查表所需的机器时间,而且对我们学习者来说有时想知道是那个端口和bit还需要查相应的文档,最为致命的是不同的板子对同一个脚还编号是不同的。
2 对于arduino官方板子来说,这样的方法还算可行,已经把这个编号标在板子上了,但对非官方板子来说,这简直是多此一举,毫无意义,因为我们板子上根本没有1,2,3,....,到是有着PA0,PC13这样好记又有具体含义的名称,在51中,通常对于一个具体的引脚我们表示为 Pa.b,a为端口号,b为bit位号, 如:
P0.1  表示 P0端口bit1脚;
在 51 构架中,该脚是可位寻址读写的,因此,头文件中通常对该脚通过类型修饰符sbit进行了定义:
sbit  P01 =  P0^1;  // 规则1   Pab
这里 P01 也可以用其他合法的符号,如我们也可以定义为:
sbit P0_1 = P0^1;  //规则2   Pa_b
这里 a 是端口号,51 构架通常用 0,1,2 数字来表示,而 avr stm等 则用 A,B,C 这样的字母来表示;
       b 是位号 0~7 对应 8位端口的最低位至最高位;
大多数芯片厂给出的头文件是以上述规则1来命名,但也有些厂商采用的是规则2 如 silicon的 C8051 头文件,对于这样的不同规则,在我们这个sduino51 系统中必须统一,否则会造成混乱,因此我采用了规则1 来定义位寻址变量,所以对所有C8051头文件均作了这样的替换(C8051老用户要注意);

现在,在arduino for 51 所有gpio sbit 的脚名称 均统一 用 Pab来表示,51 相对 avr 和 stm8/32来说都要简单,读写访问的是同一个地址, 我们仍然能够用这样的语句来设置该脚的电平高低,如程序中可用:

P01 = 1;    // set P0.1
P01 = 0;    //reset P0.1
而读取电平是
v  = P01; //get P0.1  level

因此 Pab 是系统 sbit类型的变量名称,而arduino脚号则是一个数字序数,因此我们仍需要对此定义,为了好记,我们采用这样的表示:
Pa_b;
对应上面P0.1脚,系统有这样的宏定义:
#define  P0_1    0x01  /*端口号对应的hex 数字,是不是很好记*/
对于每个芯片(板子)都有一个定义文件pins_arduino.h ,位置在 variants对应的文件夹中。
我没有像 官方arduino那样从0开始连续编号,而是用个8位整数类 uint8_t,  其高4位表示端口号 低4位表示位号(由于只有8位,实际只用低3位),显然,这样有以下好处:
1 不需要专门设置个对照表来建立 数字 0, 1,2,3,....所对应的物理引脚了,编程时 我们一眼就能判断出端口和bit位;在程序中我们只要通过:
    pin & 0x0f  屏蔽高4位,就知道是那个bit了;而
    pin >> 4;  取高4位,就是端口号;

2 按这个方案 只要未定义 P0_1 (如STC12C54), 程序编译时 用到这个符号就会发出错误信息,因此我们还可简化非法引脚编号的检查,对51资源不足的芯片上,减少了代码开销是有实际意义的;

上面出现三种格式,分别是用P0.1 / P01  /P0_1 这样的格式来表示,对于初学者来说,也许有点混乱,有必要对此做个小结:
第一个 P0.1  因为对C的变量符号来说,符号中含小数点是非法的;因此这通常只有出现在数据表文档或程序注释中;
第二个 P01   是一个 51 专有的预定义sbit类型变量,实际上代表了该位寻址的地址;
第二个 P0_1  才是arduino系统预定义该引脚的arduino编号(可以是C变量或宏定义),是个8位整数类型(uint8_t)常数;
尽管这三个助记符对我们来说都表示了端口 0 的bit1 位,但系统中只出现后两种,并且含义是不同的:具体在对应在宏/函数中用到它,如果是sfr/sbit类型,就用 P01,而如果需要的是一个数表示arduino脚号,则用P0_1;


第四部份   SDUINO 系统简介:
一、 语言和工具链
  现有所有arduino ide 支持的移植版本均采用了支持 C++ 的工具链如 GCC ,对51这个古老的构架,根本不在GCC 开发者的支持计划中,虽然 IAR 集成环境支持 51 C++代码,但也只是有限支持,我试过,IAR 连接时只能选 c库,如选择 连接 c++库会出现找不倒库文件的错误提示,因此支持有限,更主要的问题是
  a.  IAR 不是免费的;
  b.  IAR 是集成环境,不支持命令行操作;
  上述两点导致我们没有现成的C++工具链来支持 arduino ide 环境;
  因此我们退一步,采用有个专门针对小设备 c 的开源工具链  SDCC ,支持 stm8/mcs 51/ pic/z80,通过一些小技巧集成到arduino ide中;正因为如此,sduino和 arduino由于采用编程语言不同,而导致使用上的差异;

二、 sdcc 和 gcc 及 keil c51 的主要差异:
  sdcc 是个优秀的编译器,支持到最新的ISO C17标准,因此,基本兼容于keil C51,c风格也基本兼容于GCC;但针对目标mcu为51的应用和keil C51仍然有些差异,主要是:

  a.指定不同内存区域的修饰词,sdcc 需加双下划线:                     
            keil          idata                    
                          pdata                    
                          xdata                    
                           code                    
                             bit           

        sdcc                 __idata                           
                         __pdata                          
                            __xdata                                 
                                __code                           
                                __bit                          

  b.修饰词位置:sdcc则需要将修饰词前置
          keil              uint8_t  xdata  val;
          sdcc              xdata  uint8_t  val;
  c.sfr寄存器寻址变量/sbit位寻址变量定义格式不同:
          keil              sfr     P0  = 0x80;
                            sbit    P01 = P0^1;

          sdcc           __sfr   __at(0x80)   P0;
                           __sbit  __at(0x80+1) P01;
  d.中断矢量定义格式不同:
          keil             void name(void)  interrupt vector;
                           void name(void)  interrupt vector   using regnum;
          sdcc            void name(void) __interrupt(vector);
                           void name(void) __interrupt(vector) __using (regnum);
          另外,中断处理代码函数必须在main.c 声明,否则不会被连接!

三、 sdcc 和 arduino 官方采用的gcc差异,这两个编译器针对的目标不同,功能也相差太大不是一个数量级的,因此放在一起比较是不合适的,但如果仅从C角度来看,差异并不大,但gcc支持C++代码,而arduino 核心部分就是用C++写成的,因此这部分在sduino中无法实现或是只能有限部分实现,核心(core)部分主要是:
   1 String 类:    这是通用arduino 字符串支持C++类,sduino不支持,替代方案是用c方法来处理字符串,如用c vprintf 来格式化字符串,用printf来格式化并输出字符串;
   2 Stream/Print:  输入输出IO流控制,不支持,好在对51来说,人机接口和文件处理不是主要的,
   3 HardwareSerial/Serial: 这是串口输出,也是玩单片机最重要的部分,用来观察运行结果或输入指令数据控制单片机运行,但arduino该模块是C++写成的类结构,并且继承了Stream/Print基础类,因此是移植的难点,现在采用部分兼容和替代方案;C++支持同一函数的不同类型和数量的参数,但在C是不合法的;因此原来arduino:
     Serial.print(x,x) 及Serial.println(x,x) 使用了一组函数替代,它们是:
                Serial_print_s
                Serial_print_sn
                Serial_print_i
                Serial_print_u
                Serial_print_ib
                Serial_print_ub
                Serial_print_fd
                和
                Serial_println_s
                Serial_println_sn
                Serial_println_i
                Serial_println_u
                Serial_println_ib
                Serial_println_ub
                Serial_println_fd

        另外干脆直接用c标准输出输入库(stdio)的 printf含数;
        为了便于移植及和其他核心的arduino 应用代码兼容,对Serial 增加了一个运行代码的指针结构,从而使其具有arduino的风格(style),为了不至于耗费过多的资源,仅包含:
        Serial.avalible();
        Serial.read();
        Serial.write(unsigned char);
        Serial.printf(fmt,...);
        其中 Serial.printf(fmt,...)等价于直接调用printf(fmt,...);用来替代arduino Serial.print() 和 Serial.println();
               
    4 arduino 库:
   和内核一样,由于大部分arduino库都是由C++写成,因此基本不能直接使用,但只要不是反复建立在C++类基础上的库,还是可以很方便地移植到sduino,其中libraries有多个这方面的例子;以后我会祥述,并移植一些;

    5 实际上用C语言为SDUINO写成的库,只要不要硬件依赖的,都可以在ARDUINO/gcc下运行,反之则不行!











打赏

参与人数 2家元 +40 收起 理由
人艰不拆了 + 20
杨雪飞 + 20

查看全部打赏

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-8-1 20:13:00 | 显示全部楼层
本帖最后由 huaweiwx 于 2019-8-1 20:53 编辑
zxy882266 发表于 2019-8-1 18:59
我的文件已有TOOLS,你提供的文件应该合并吧?如果覆盖了原来的AVR有关的ARDUINO将不能运行吧 ...

只要不覆盖 avr文件夹就不会影响原来的;
这个包tools中 只有一个win文件夹;
没有冲突;

另外,你安装的 arduino版本为 1.6.5 低了点,建议安装 1.8.5 或 以上版本;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-2 21:05:07 | 显示全部楼层
mayuanfu 发表于 2019-8-2 19:04
请问大侠,我选STM8F003测试时出现bash.exe: warning: could not find /tmp, please create!请问TMP要建在哪 ...

这是 windows 模拟 linux环境 的 msys系统,bash.exe 会显示这个警告信息,我在百度查过,没找到屏蔽办法或解决方案。但不影响使用。可以忽略这个警告信息。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-3 20:42:25 | 显示全部楼层
mayuanfu 发表于 2019-8-3 17:55
我用Arduino 1.8.9按楼主的方法测试,新唐的51和STM8系列的编译都通不过,不知是何原因,请帮忙看看.下面是截 ...

1 用个空文件,选avr mega板子能通过;确认系统无误。
2 看看 51/stm8 能否通过;
3 如系统安装过sduino,请删除,并重新下载我百度共享的最新版本试试;
4 仍有问题,贴上完整的出错页面,最好通过【复制到剪贴板】把编译过程信息全部粘贴到帖子里,我看看能否发现问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-9 16:15:38 | 显示全部楼层
本帖最后由 huaweiwx 于 2019-8-9 16:17 编辑
kindzhon 发表于 2019-8-9 15:43
这个编译出错,好像是不认识目录里的空格。

Arduino:1.8.4 (Windows 10), 开发板:"STC15F/L/W, STC15F2K6 ...

你的ARDUINO安装在 G:\Program Files,  路径带空格,Msys 不支持;

因为我用的系统是win7/笔记本是xp,所以 msys 版本较低(试过高版本Msys xp 不支持),选了这个版本msys,没试过Win7 以上版本;

现在有两个解决方案:
1  将 原来G:\Program Files(x86)\Arduino  整个 文件夹拖放到 你 G:\ , 放在根目录,就没有这样旧版系统的空格非法路径了;
2 不知最新版本Msys 是否支持,可以试试,但除非熟悉系统,否则不建议;
我是安装在根目录的:如图:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-9 18:57:31 来自手机浏览器 | 显示全部楼层
kindzhon 发表于 2019-8-9 17:54
整体移动不知道原来的arduino会不会出问题。

没问题的,不放心的话,可以copy到根目录。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-12 18:00:56 | 显示全部楼层
我估计你的情况和33楼相似,如仍未解决,请贴上出错截图;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-15 21:40:40 | 显示全部楼层
本帖最后由 huaweiwx 于 2019-8-15 21:57 编辑
kindzhon 发表于 2019-8-15 17:28
这个算是生成了Hex了?我看有8K大,就一个blink。

我看了你的编译信息最后几行 :

bash.exe: warning: could not find /tmp, please create!
   Name             Start    End      Size     Max     
   ---------------- -------- -------- -------- --------
   PAGED EXT. RAM                         0      256   
   EXTERNAL RAM     0x0001   0x0043      67     2048   
   ROM/EPROM/FLASH  0x0000   0x0c67    3176    61440   
项目使用了 0 字节,占用了 (0%) 程序存储空间。最大为 61440 字节。
全局变量使用了0字节的动态内存。

我要说明一下:
bash.exe: warning: could not find /tmp, please create!   这是windows下解释执行 linux脚本的批处理脚本的执行文件,会出现这个警告提示,百度上有人问过这个问题,没看到解决方案,可以忽略这个警告信息。
最后两行显示程序空间使用 0 ,ram使用 0 这是arduino集成环境最后处理 xxx.elf 文件取得内存使用情况并统计输出的结果,但我们在51上不支持这样的文件格式,我也不知如果将内存使用情况传给arduino ide,因此最后两行信息也要忽略;
显然不显示内存使用情况是不方便的,因此我生成hex后直接将编译内存使用情况统计文件xxx.mem 摘要显示,这就是中间 5行;显示 4列 开始地址/结束地址/实际使用长度/可使用最大长度
其中   PAGED EXT. RAM      这就是 pdata的使用情况
          EXTERNAL RAM       这就是 xdata的使用情况
          ROM/EPROM/FLASH 这就是code  代码段flash的使用情况
由上述信息可见  使用了 67个字节ram      可用 2k
                                   3176字节的flash 可用  60k
至于执行文件 hex格式是包含地址信息的,文件长度不等于代码长度;    没有直接对应关系。

回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-15 21:54:34 | 显示全部楼层
kindzhon 发表于 2019-8-15 17:27
移到根目录了,可以运行,但还是出错。这个/tmp应该建在哪儿?G和C盘根目录都建了。
bash.exe: warning:  ...

不能看hex文件的大小;只有3k大小代码(包含了初始化、全部中断矢量);
要看编译的统计信息,显示信息最后第三行 ROM/EPROM/FLASH  使用了从0到0x0c67 共 3176个字节(正好3k)
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-16 16:31:55 | 显示全部楼层
kindzhon 发表于 2019-8-16 14:17
哦,你是说刷进mcu里的大小 也不是hex大小 ?

hex 文件(顾名思义16进制文件),包含一段一段的地址信息和代码,都是是用asc 16进制字符(0~F)表示的,因此文件长度和写到内存中的长度是没有对应关系的,取决于分段的数量;
我们知道内存中的一个字节,用16进制asc表示就要两个字,加上地址信息,检查和,结束标志等,至少是hex文件长度是实际内存中的两倍以上;
还有一种格式就是bin格式(顾名思义二进制文件),对大多数单片机来说,代码开始位置也是固定的,因可只分一个段,就直接使用二进制存储格式,这个长度一般情况下就是等于写到内存中的长度;

对于stc 你可以用stc-isp-15xx-v6 打开上述arduino编译的代码文件看看就知道了;
这是我装入一个长度约20k的hex文件例子,执行代码长度是 0x1FB1,8k不到一点:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-19 09:03:28 | 显示全部楼层
mayuanfu 发表于 2019-8-18 23:24
大侠,记得把STM8的STLINK工具加上.这样就方便多了.

stm8 就是用的 stlink swin,唯一选项,只是没在菜单显示罢了,你图中显示信息就是stlink上传成功的信息啊!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-22 11:55:33 | 显示全部楼层
本帖最后由 huaweiwx 于 2019-8-22 11:57 编辑
mayuanfu 发表于 2019-8-19 23:49
感谢楼主的回复,我上传成功的图片是用STM32上传时抓的图,STM32菜单上是有STLINK的选项,STM8就没有,软件编译 ...

确实我疏忽了漏了这部份的安装包。我在github上stm8共享中有安装说明,stm8 下载工具原需要先安装官方包,这样会自动安装在系统 AppData/Local/arduino15/中,现我已经将其移动到hardware\sduino\tools\win\STM8Tools,这样copy 安装就不会出现未找到工具文件的错误,下载工具也由原来的stm8flash 修改为官方的 stvp下载的命令行版本 STVP_CmdLine.exe,相应修改了boards.txt和platform.txt;百度下载我最新版本;

附 2019.8.22  sduino20190822.rar 修订记录:
     1  更正一些错误;
     2  液晶库 LiquidCrystal 1602/2004 现支持全部芯片,可选择 4位/8位并口(parallel),8位端口直接输出(port),i2c/hc595 等多种接口,并统一了接口的协议;(见demo)
     3  stm8 下载工具原需要先安装官方包,并会自动安装在系统 AppData/Local/arduino15/中,现以将其移动到hardware\sduino\tools\win\STM8Tools,这样copy 安装就不会出现 未找到工具文件的错误,下载工具又原来的stm8flash 修改为官方的 stvp下载的命令行版本 STVP_CmdLine.exe,相应修改了boards.txt和platform.txt;
     4 安装时,如有老版本存在,需要先备份和删除sduino整个文件夹;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-23 08:56:11 | 显示全部楼层
本帖最后由 huaweiwx 于 2019-8-23 09:00 编辑
mayuanfu 发表于 2019-8-22 22:59
下载了百度盘的更新,安装后没有发现工具栏有更新,是不是哪里操作不对,更新后发现编译出错.
...

谢谢指正!
stm8/system/common/callbackfunc.h 是51包中的,新加入stm8,为了以后两个系统库文件通用;
行167错误,可手动修改删除该行中的关键词 __code ,  __code 是 51 专用,在stm8会出错,也可去我百度共享下载该补丁patch20190823.rar, 解压后覆盖 stm8/system/common/callbackfunc.h 文件即可;
另外菜单没变,因为stm8唯一选用了 stlink作为上传工具,只要stlink 通过 swin 和目标板子连接好,直接点上传(UPload)即可。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-26 00:12:09 | 显示全部楼层
本帖最后由 huaweiwx 于 2019-8-26 00:31 编辑
mayuanfu 发表于 2019-8-23 23:00
感谢楼主的分享,最近对SMT8和N76E003两个芯片感兴趣,但不会写软件.现更新sduino20190822后编译可以通过,但 ...

谢谢!确是个bug,部分板子没有修改到位,主要是stvp 参数中设备名称需要大写,stm8/boards.txt 已在最新补丁中,请下载。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-8-26 01:11:07 | 显示全部楼层
hui223 发表于 2019-8-24 15:23
嘗試放入Mixly0.999中,結果arduino-1.8.9的IDE可以,但是Mixly不能啓動,能讓Mixly調用Arduino for 51 嗎 ...

Mixly 图形化界面这个没有试过。
我觉得官方板子可以用这个Mixly 图形化界面,但 51 支持目前没有官方的板子,因此脚号定义也没有按官方的规则来做(如缺省 led 总是定义为 LED_BUITIN 脚号 13);
至于整合到 mixly, 要等以后51 arduino基本完善后抽空我来试试;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-10-15 09:45:49 | 显示全部楼层
本帖最后由 huaweiwx 于 2019-10-15 09:47 编辑

谢谢测试并反馈给我这个信息!
n76e003 延时部分我在内部做了两个可选的实现方法,编译时可通过选项
定义个宏变量 USE_SYSTICK 来控制:
1 简单循环延时 / 2 通过定时器timer0精确延时;

考虑到大部分应用都是简单控制,时间要求不高,因此系统缺省是通过简单的循环来实现delay, 这方法优点是代码短,不占用timer0;而对于时间精度要求高的应用需要使用定时器,可以直接使用n76e003 BSP中的定时器延时函数:Timer0/1/2/3_DelayXXus/ms 函数;

一 如果希望仅对某个工程使用定时器来实现延时函数,可在该工程中增加个配置文件:
HAL_config.h ,并在其中加上定义:
#define  USE_SYSTICK   1
(说明,系统会自动装入 HAL_config.h ,因为工程所在路径在全部搜索路径的开头,会优先装入)

二 如要改缺省使用定时器的延时函数,则需要在文件: mcs51/cores/N76E003/wiring.c  中,加入:

#ifndef  USE_SYSTICK
#define  USE_SYSTICK   1
#endif

来定义缺省使用定时器延时的delay,当然这也实现了:
millis()
micros()
delay()
delayMicroseconds()
在缺省定时器的延时函数的情形下,某个特定的应用仍可以临时改为简单循环延时,这是在HAL_config.h ,并在其中加上定义:
#define  USE_SYSTICK   0
(HAL_config.h 中的配置的宏变量,总是最优先的,这和我在其他 如stm32/efm32/nuvoton arm arduino中的用法是一致的)

三  简单延时函数我是定义了一个 LOOP_US ,位置在 system/N76E003/mcu.h 中,可以修改NOP() 个数来标定时间;

回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-1 11:07:09 | 显示全部楼层
本帖最后由 huaweiwx 于 2019-11-1 11:10 编辑
w511577 发表于 2019-11-1 01:57
大神帮忙看下这个是什么问题

Arduino IDE 版本1.8.10  的预处理 有bug 就是指定的工具路径并不会正确处理,而是指向了该路径的下一个文件夹位置! 其他官方支持没有问题,但我们这个是借用了它的IDE环境,就有问题了,我也更新到这一版本后也发现了这个问题,但没找到解决方案,就暂时只能退回到上一个发行版本 1.8.9,等下一版出来后再更新试试;
重要的事情说三遍:
Arduino 1.8.10 不支持! 请暂用 1.8.9 版;
Arduino 1.8.10 不支持! 请暂用 1.8.9 版;

Arduino 1.8.10 不支持! 请暂用 1.8.9 版;


回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-1 20:55:22 | 显示全部楼层
mayuanfu 发表于 2019-8-2 19:04
请问大侠,我选STM8F003测试时出现bash.exe: warning: could not find /tmp, please create!请问TMP要建在哪 ...



消除  bash.exe: warning: could not find /tmp, please create! 方法:

在 arduino/hardware/sduino/tools 下,建立一个空的文件夹,可以消除这个build 警告,见下图:



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-6-30 16:14 , Processed in 0.171601 second(s), 11 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表