北城南笙123
发表于 2024-7-3 14:00:58
CosyOS 发表于 2023-10-20 22:30
参会学习,【免费+包邮 送】:
【一箭双雕之USB转双串口,2个USB-CDC转串口+HID烧录】
【STC-USB Link1D,2 ...
你好我想问一下就是怎么领取就是在咱们这个一件双雕呢?
CosyOS
发表于 2024-7-3 14:35:57
北城南笙123 发表于 2024-7-3 14:00
你好我想问一下就是怎么领取就是在咱们这个一件双雕呢?
【免费+包邮】 送/申样/采购 可上班时间加 如下您对应地区的客服 QQ或微信联系
加STC华南区客服刘经理QQ: 3398500488 ;微信:18106296592要求 【免费+包邮】 送, 还免费教仿真
加STC华南区客服曹经理QQ:1933892258 ;微信:18106296595 要求 【免费+包邮】 送, 还免费教仿真
加STC华东区客服聂经理QQ:2593903262;微信:18106296598要求 【免费+包邮】 送, 还免费教仿真
加STC西北区客服孙经理QQ: 1347154513 ;微信:18106296593要求 【免费+包邮】 送, 还免费教仿真
加STC华北区客服石经理QQ: 1638975601 ;微信:19952583876要求 【免费+包邮】 送, 还免费教仿真
加STC华中区客服唐经理QQ:2571301708 ;微信:18106296589 要求 【免费+包邮】 送, 还免费教仿真
加STC东北区客服张经理QQ:3141888640 ;微信:19952583265 要求 【免费+包邮】 送, 还免费教仿真
加STC西南区客服张经理QQ:3141888640 ;微信:19952583265 要求 【免费+包邮】 送, 还免费教仿真
工作时间:8:30-12:00,13:00-17:30(周一 到 周五, 法定节假日除外)
【免费+包邮】 送/申样/采购传统电话热线:0513-55012928、0513-55012929、0513-55012966
工作时间:8:30-12:00,13:00-17:30(周一 到 周五, 法定节假日除外)
以后技术咨询直接到 STC专业的技术支持论坛 www.STCAIMCU.com 进行技术支持,
不愿意提供详细联系信息申请【免费+包邮送】的芯片和仿真脱机烧录设备的:
===可直接微信收索:STCMCU; 即可进入 【STCMCU微信小商城】购买,也很方便
一笔长空
发表于 2024-7-3 14:57:02
课程一共就7集结束了吗?要是结束了我就开始看回放学习了{:4_165:}
tzz1983
发表于 2024-7-4 13:17:22
请教一个问题:keil C251编译器
u8 xdata abc _at_ (4096);
这样是一个绝对定位,
假如我只是要四字节对齐, 并不需要绝对定位, keil C251编译器有对应的指令吗?
CosyOS
发表于 2024-7-4 13:57:25
本帖最后由 CosyOS 于 2024-7-4 13:59 编辑
tzz1983 发表于 2024-7-4 13:17
请教一个问题:keil C251编译器
u8 xdata abc _at_ (4096);
别说,还真有这样的功能,
C251示例:
int x __attribute__((aligned (4)));// Aligns on 4-byte boundary
A251示例:
var1: DSB 1
ALIGN 5 ; align to 2^n(32)byte boundary
所以可以:
u8 xdata abc __attribute__((aligned (4)));
tzz1983
发表于 2024-7-4 15:31:02
本帖最后由 tzz1983 于 2024-7-4 15:32 编辑
CosyOS 发表于 2024-7-4 13:57
别说,还真有这样的功能,
C251示例:
{:4_250:}
感谢迟总指导, 话说你是怎么办到这么快就知道作案的呢?
我这边的问题也有些眉目了,
其中一个小问题是内存管理要求传入的首址是对齐 "指针宽度".
我正好关掉了传入参数检查功能, 以前没发现这个问题.
另外用XDATA出现水土不服的情况也有所改善
主要原因还是各种类型指针的转换造成的,C251的指针类型太多了
相互转换的时候偶尔会出错
下面贴一点比较有意思的代码:
看结果:
搞笑吧, 第二次赋值也是加强制转换(u8 xdata*)addr , 但强制转换的作用好像消失了{:lol:},我的1呢, 不见了!
再来看一个:
第一次判断 为两个指针不相等,这是肯定的, 本来就是两个不相等的地址.
但后面两句表明, 他们都可以和NULL相等, 有没有点自先矛盾的感觉{:tongue:}
为了应对这种隐患, 我经常干这个事情:
char xdata bNULL _at_ 0;//把这个地址占掉, 谁也别想用
CosyOS
发表于 2024-7-4 18:12:19
tzz1983 发表于 2024-7-4 15:31
感谢迟总指导, 话说你是怎么办到这么快就知道作案的呢?
我这边的问题也有些眉目了,
研究很仔细,指针确实是有很多说法,不同编译器对指针也都有不同的理解,
对指针的处理是容易出各种问题的,尤其是 C251。
以前,C51、C251,都没用到 字节对齐 功能,今天你问这个问题,我就查了一下 keil手册,
才有的答案。
stc-xuewei
发表于 2024-7-4 23:40:15
有这样一个应用场景,使用CosyOS自带的全局变量操作,定义一个全局变量,中断中只写,任务中只读,还需要定义全局变量的副本并在全局变量钩子中更新副本吗?
CosyOS
发表于 2024-7-5 04:21:36
本帖最后由 CosyOS 于 2024-7-5 04:24 编辑
stc-xuewei 发表于 2024-7-4 23:40
有这样一个应用场景,使用CosyOS自带的全局变量操作,定义一个全局变量,中断中只写,任务中只读,还需要定 ...
不需要,全局变量副本 是专门用来应对 中断中的全局变量的只读访问的。
对于你的情况,中断中只写,如果全局变量是非原子访问类型,
中断中直接调用相应的写服务,任务中在任务临界区中访问即可。
中断中写访问:
写全局变量:iWriteGVar(gv, lv);
写全局数组:iWriteGAry(gp, lp, size);
写全局字符串:iWriteGStr(gs, ls);
任务中访问:
uEnterCritical;
访问全局变量,读、写、自运算,皆可;
uExitCritical;
其实,关键是要看在中断中做什么?任务中随便做什么都无所谓。
1、中断中写访问:直接调用写服务。
2、中断中读访问:全局变量副本。
3、中断中自运算:其它中断中有写访问 且 可能出现高速并发吗?
No:挂起服务调用,iPendSVC(fp); // 其它中断中没有写访问 ||即使有,中断的频率也没有那么高,不会出现高速并发(高速并发写同一个全局变量)
Yes:挂起服务钩子,pendsv_hook();
CosyOS
发表于 2024-7-7 15:19:24
当前,CosyOS-II V3.0.0,
C51,对 可重入栈 的支持存在 bug;
C51、C251,用户自定义任务切换现场保护 存在功能漏洞;
过两日将发布新版修正,请大家先不要用上述两个功能。