关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7173|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构1 B8 B, [+ W# h7 {
  B' x$ b5 _5 |" j  [
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
! n* N5 \; m# ]& z4 B( G5 e  w
, |- \4 T* h3 [5 h其他程序段。。。。。' n9 U% q3 b, i; u- f4 V* Y

" X2 a0 H2 S) I/ e   free(x_d);& Q6 j8 N3 U: A& H8 r6 G- C- Q
4 v; {& \2 a/ z
使用DSP侧单独调试功能,验证动态申请没有问题,# U7 L8 d  D3 k7 W& T# Z

0 n5 C  Z  Y+ |( G但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。! F6 h4 A+ `  c. W/ F" E

2 c) l, a/ Z3 M$ o- U( K$ N& ]1 I0 L% i$ Y. E
6 o! v8 [1 Q& h1 c1 k; s

8 P5 P2 D" [  d' @- Z
3 l. a2 h9 u5 g  M. z  D
1 f" H% H+ O$ B
% `# u0 B' p9 ^% ?  C1 p
% Y$ k$ F( s& O1 `. ~8 u, K  T2 [# y$ Y5 u8 s4 c

( L6 {9 p  Z: t  q; ^1 H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明  J4 H* Y7 a) m) j* k& B- E
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
- H: t. B. a6 G$ G' j- b6 n% d(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" c3 j( a+ @) l: p6 S

' W( I9 W! x/ n/ d, p是不是需要在DSP.CFG中进行配置1 X: O* c2 l, ]8 s& z
我现在的配置为! a, I- q6 m8 J3 W

! F6 c2 H9 C9 i+ H1 Y* O- M" ?+ C/*2 Z$ v/ _9 n  D4 p- I
*  ======== Operating System Configuration ========
4 u& A9 O* R9 a: @ */3 v( p: v  ?) e8 R9 u3 i' P, g7 Y( ?
) H  ?1 k- o( g) h" m
/* no rts heap */3 w  J! X1 v7 H0 n# B4 K
Program.heap = 0;
/ O1 h. i% M& {% r" h+ F/ {Program.argSize = 100;  /* minimum size */3 B! w  ]5 l" C
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
' R( x+ \3 p* ~: G  M1 S9 K# j! R- _6 M+ j) m$ g, }
/* create a default heap */
' N/ i# I% `' p* G+ p! {var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');( \/ S/ y: ^2 k( }( E& b% n/ w3 Y% V. Q5 k
var heapMemParams = new HeapMem.Params();
" l0 E( }& J, u/ d3 \% dheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( ~4 y; ?0 c" W. G5 C) u4 o
* s& e6 u5 ]( Z' ^' A
var Memory = xdc.useModule('xdc.runtime.Memory');6 _$ e/ ]. s  V& J0 y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* d4 a, _4 o  b3 }

" B# s$ O9 F) ~- @* R/* configure System module */
2 k6 [& J  O1 l& f% Y! Evar SysMin = xdc.useModule('xdc.runtime.SysMin');/ U8 s4 ]: y' g
SysMin.bufSize = 0x1000;4 V+ O8 [/ c# z" h
SysMin.flushAtExit = false;
* h7 L/ ~8 R! G/ B5 u$ E" H: r2 }% h7 l
var System = xdc.useModule('xdc.runtime.System');: i) c  `5 F2 Y$ b( S+ b5 S0 ?+ d+ c
System.SupportProxy = SysMin;
- w3 p+ m& M" U) m
0 k) p9 z- _2 K$ L1 y/* configure SysBios to use the lower half of Timer 1 */! H0 q; D$ `  i
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
# V: Y! l9 m! Ovar Clock = xdc.useModule('ti.sysbios.knl.Clock');
- S0 b8 W& B7 ]5 f/ ?$ u) ATimer.timerSettings[1].master = true;/ y" n) P0 [; V
Timer.defaultHalf = Timer.Half_LOWER;, R  t* E! P3 ?, k; j; d& ]8 m* s! Q
Clock.timerId = 1;
+ \9 l& a1 s* L! d2 a- q7 B, }
6 H$ |* d$ E9 l# e& M! F2 m3 o7 q5 P- [+ @
/*, w- Z/ J0 Y9 J* y4 h- J
*  ======== Miscellaneous Configuration ========
" \; [- ^$ z* ]; A, v */1 o: ?9 ~% H3 H9 M' P$ D
5 m/ b2 ]% j3 `; e) v# p
/* set default diags mask */  Z9 g2 z$ |7 b6 v, f
var Diags = xdc.useModule('xdc.runtime.Diags');
' j/ V, W' ^' f/ c) ~: ivar Defaults = xdc.useModule('xdc.runtime.Defaults');
6 C! Z( E! f# Y& N! I
% ?4 I% o  K# z# M; _  E0 w$ O$ cDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;. [2 E& D) \0 [1 x7 E- v4 R
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;! J) n2 t3 ^: M
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;7 S  q9 b3 E( ?( }! [( r
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */. @, Y* [7 Z% [& [$ [. m
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% t. X* Y0 n) u7 W& j
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
1 w& Z' b! A8 h6 m! z$ C/ yDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;& s& D6 S2 p( V5 M
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;  z) G) n8 L; P' c3 \' P+ O8 k) a( a
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
! |5 y& d; ~( ]! b0 c3 a$ MDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
) }" F' w3 ?( ~' g5 a7 aDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
& f& a; n: `1 r, _  g2 N( Z0 BDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
* B; A, G+ R: ~7 M* D& O$ F2 GDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;: z$ u7 i) h0 h7 C- J6 U2 k2 A
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
( t0 K& Y. f  o+ I" ]9 ^; F: R& m, A' Y4 p. ]. I
/* override diags mask for selected modules */
+ R& p, n, A6 L/ d; D0 B4 E* Hxdc.useModule('xdc.runtime.Main');
; K5 w- D+ J( {+ L5 d$ U* EDiags.setMaskMeta(( |  x7 e+ Z: p" c5 s
    "xdc.runtime.Main",
# G1 ~1 _5 e6 r4 `7 L7 {    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 K8 e5 y$ ]& M4 ?1 W    Diags.RUNTIME_ON& S# u5 \. \! u0 D$ C
);' b9 ~! R/ q! D: e* e. F
, A1 j; m4 d7 q- @3 ]' I0 q7 U6 A/ x
var Registry = xdc.useModule('xdc.runtime.Registry');# d( C+ g2 B- q+ \7 b( \6 U/ e
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;$ k" N  Z" S: m+ X+ z/ q7 L- U* u
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
, g+ z/ o4 x% [; t* x( CRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
+ g) B9 z2 a# X! _3 [; mRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
! X' }4 J5 b& l( u4 v" [+ N/ {1 y8 ?  e
/* create a logger instance */  l# [+ O* N  A7 i" J. [1 z
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
2 G: j  _  C& P! _8 d/ i3 Y+ bvar loggerBufP = new LoggerBuf.Params();
! }7 }! k5 [) I: J/ RloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
' v! Z5 j! g6 F4 q& RloggerBufP.bufType = LoggerBuf.BufType_FIXED;
& {, x1 y/ n3 z' o( |) U: {& J5 C3 k3 k/ X2 m
var appLogger = LoggerBuf.create(loggerBufP);+ {! c4 L+ G! t/ \& ]0 i
appLogger.instance.name = "AppLog_Core1";
( a9 b/ w6 B2 t+ D4 U# q7 wDefaults.common$.logger = appLogger;
  ]1 J( D, }5 V: q5 F3 rMemory.defaultHeapSize = 0x8192;    / u/ O  Z* X2 S* Z+ |9 D. p0 x
Idle.idleFxns[0] = "&LEDStatus";/ j' X4 s4 p& B
Cache.initSize.l2Size = Cache.L2Size_32K;# u" T3 j5 z/ g4 B

" o7 H0 t3 p/ c7 D9 Y+ ]
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */+ `5 G0 m9 z* ?$ N
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& G3 u2 }- g+ n0 q) M
var heapMemParams = new HeapMem.Params();; r7 }3 T9 X7 L
heapMemParams.size = 0x4000;$ `; d$ p# s" Z
1 k5 Y. }- \' z& C
var Memory = xdc.useModule('xdc.runtime.Memory');
6 Z' n. z9 C9 u9 _Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ J/ I& G- `! E  {  v; r

0 z& l. ~( K# X, Q+ R我大约calloc  每次共计大小为5K*16bits,
* D1 C0 w7 U' R2 a* a4 ]2 z* U而默认配置才0x4000、需要改大。) F: {9 \$ r7 a9 i2 `
8 d9 w( f; U; Z: T( ]9 `+ |
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */9 [! l) u1 X6 c" v4 A+ x$ r7 y
Program.heap = 0;7 k; |9 o7 z* F0 O* Y& X
Program.argSize = 100;  /* minimum size */
3 b' ?. v& J% |: _8 u$ TProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-12-28 06:11 , Processed in 0.041059 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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