关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
% L4 f; g- a2 a; b; o; E; F  z1 n2 `  V% Y1 _  p7 E) ~
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256  n0 s3 ?$ X' S4 @8 E' C8 _4 _+ t

* n( y4 A; B6 j, c# J其他程序段。。。。。
' x" _3 V! m2 n . W7 I# W& E5 a! u8 u( X+ ?. b
   free(x_d);$ ~4 J- D5 k( b' N4 S

2 x0 |. ?$ }7 A) q8 c. m使用DSP侧单独调试功能,验证动态申请没有问题,
( ~4 E/ y) W1 w3 m1 z+ Y6 m; s' E) |% }$ i- G/ g, M3 s
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。; a' k; K0 ]2 A. K5 R

4 }" ?" h- G. L7 A) ~0 h6 |1 F
9 h* |# y' x; o7 u8 v$ H
6 R- n8 Z% I# e6 d+ ~0 r9 y" M& }+ |! Y1 K! X, U

, H9 A4 s8 Y8 B+ a3 i7 K+ _* y8 a* j# ~- y

- F4 z% f0 G  a0 m# c: Y; h
8 @# c) D9 K0 I; C! p+ S+ R  u3 h4 I& E; y' R( v
0 S5 O' P2 [9 k6 E% @. x& l
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */! |7 n- l0 X5 J* D
Program.heap = 0;
. p( L8 L9 P+ s7 n* J4 |! i8 `: `. q+ JProgram.argSize = 100;  /* minimum size */
; W8 w/ r% M  R2 u4 f8 \Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */2 z: C2 i5 d" [  z* k+ K
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& ^8 k% `6 `, p  ~  lvar heapMemParams = new HeapMem.Params();9 l0 G/ h9 f; l5 h  @
heapMemParams.size = 0x4000;
) ~, b/ B, b! ^& `( ]3 N
2 Z9 ~+ H, X& _2 w. i9 j# \var Memory = xdc.useModule('xdc.runtime.Memory');
) {% a% z) i8 Q" eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);; B0 |# q# N; u# w! R2 Z# u5 a
% y9 s; c% A3 k! p
我大约calloc  每次共计大小为5K*16bits,
9 e# B8 t: _4 L* f而默认配置才0x4000、需要改大。6 w" l, y! L! K0 K% s. }& ~' z& ~
8 U  v0 f  B8 R
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明0 V& D7 _" ^. X5 T5 t7 `
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
+ p5 A- J, j4 p. Y& b; b4 E(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
  ]1 \- s8 G; h) y' `
2 r; M8 @, w+ h) {6 z0 Q
是不是需要在DSP.CFG中进行配置
3 M7 P8 u- T4 _# F我现在的配置为8 B" J4 Y7 F' F, ^
$ s4 \1 [1 F: i
/*
! I# |7 E) B, n3 k1 x *  ======== Operating System Configuration ========4 V. X' p5 t7 m6 @
*/
/ R. Q) {/ t/ J# |' k$ ]" |5 x0 v3 e+ {' l7 f
/* no rts heap */5 L2 w- D) G- K$ v  ]' ?
Program.heap = 0;
0 R6 `: _/ ]5 N5 T  L. ]Program.argSize = 100;  /* minimum size */
8 `. k6 b2 k  t8 u) G% _+ {Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
& ^4 I2 ~" L* `  V  F
, U, I/ j( q0 f" Y+ A- j/* create a default heap */
7 F: }7 ^# B/ f9 h! U6 S; n. F1 gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
) e2 [+ m9 [6 `9 r( J% u9 f) jvar heapMemParams = new HeapMem.Params();5 \+ u& A' ~, I; q7 @- ?% m6 Z# _
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大/ Q7 {; X4 w) N2 y1 [( O) q

6 U! O+ g' ^; I  [. a  Z7 D/ \
var Memory = xdc.useModule('xdc.runtime.Memory');& Y4 W  G; l, c% Y8 P
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 i! ?% h$ [$ o
& s/ i: k( \( b3 A) D/* configure System module */6 C9 f7 V1 t6 @, d7 c- [; t
var SysMin = xdc.useModule('xdc.runtime.SysMin');/ S6 O0 m. V  U  Y' b8 U- [
SysMin.bufSize = 0x1000;
4 E2 Y9 ]$ ~& j7 H, K% {SysMin.flushAtExit = false;
/ b5 F, e9 C# W8 y4 J% Z2 c1 P) _) X
var System = xdc.useModule('xdc.runtime.System');
# P3 s  F& a  xSystem.SupportProxy = SysMin;' k9 T) B7 g( h
5 O1 `4 m- j. N- k
/* configure SysBios to use the lower half of Timer 1 */
# `$ R" w3 k3 v( i: \, ~3 f. Z2 e# x. Ovar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ g; |+ @1 {% @2 t4 ]var Clock = xdc.useModule('ti.sysbios.knl.Clock');
9 c0 ?2 q% w: H9 @Timer.timerSettings[1].master = true;' ~2 N' G6 q3 i) k/ h; N
Timer.defaultHalf = Timer.Half_LOWER;
% j6 N% n/ P& H0 w8 @Clock.timerId = 1;  g9 ]7 A5 K8 D

; E! _, b" w8 z( y3 P$ j- w" M6 N% f5 C8 B8 q
/*
, e- L- C' V7 D  ?8 w *  ======== Miscellaneous Configuration ========
; X& ?0 W( i  Y. g+ _0 s */
, V7 y3 v0 ~+ }" [, g/ ?( b3 _" k& w
/* set default diags mask */  m2 u# d  W6 b) d# M1 T2 ?
var Diags = xdc.useModule('xdc.runtime.Diags');
, e; p" }1 l9 t* evar Defaults = xdc.useModule('xdc.runtime.Defaults');
8 _# i7 v. u" v& h! e1 O8 w/ _) j8 x0 w" M1 ?  h
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
' y/ n6 b/ A2 ~+ j2 IDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
% L0 z0 u( ?3 U4 O8 ?+ ?8 dDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
2 N+ w( w9 @; sDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* Z+ a1 J" v' X1 l# ~
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
7 B4 C) p& F7 XDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;/ k7 K! x" P) T; L$ a+ \% s5 j) v
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;; p* V7 z8 S4 N3 m9 b) j1 x3 |) Y
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;1 o. F3 a+ D3 b+ k# I, j
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;8 n, t6 _5 e  M6 F1 I- @! u
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;: r& }$ n0 U- c6 v8 ^1 F
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;* |4 P: L. d/ C. s) `: q8 x
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
8 K) y1 `4 N/ Q( L2 EDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 t; _( B6 w& ?' `; D, H
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;  c0 [& j) g  u" ]  l
8 Y. y; D( N4 D
/* override diags mask for selected modules */# f1 K! I2 y8 Q9 Y! O. C5 e2 y5 K2 X
xdc.useModule('xdc.runtime.Main');
2 q3 U3 a5 @/ g- v: @Diags.setMaskMeta(
' S8 `# J5 u7 i9 J$ s* @+ g    "xdc.runtime.Main",5 N. S: ^" X6 W$ Q3 b% j3 t1 Z4 x# W
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( D" e! g: k3 ^2 u0 k" {% L    Diags.RUNTIME_ON
. |8 Z- ^5 @3 _9 R& ^% D5 w1 ?+ f);5 O* h; O: f  c1 T& m7 S, c1 w

: ~& F- Y1 ]6 Gvar Registry = xdc.useModule('xdc.runtime.Registry');2 E/ ^3 a) |, \/ K: S8 [
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
" r7 F; G" y" q5 V5 f0 f* NRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;. Q) S( D1 d4 r( J2 z
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;  }& J: @' A" F6 m
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
# y' v6 Q- R, f& f7 x4 R8 q- M6 b8 b1 z3 x
/* create a logger instance */( {& [; y7 ~: {
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');: |8 e1 B9 ]* r4 S  R0 h
var loggerBufP = new LoggerBuf.Params();# h! E; t+ i3 l. x, Y  ]( U
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
& O+ z! q- b; S* c4 h% X9 \  LloggerBufP.bufType = LoggerBuf.BufType_FIXED;; `+ i3 u: c4 W! G
9 ^% p2 M8 H& l; f7 R: J
var appLogger = LoggerBuf.create(loggerBufP);
8 o) W0 G& R- v6 C7 z( E2 ZappLogger.instance.name = "AppLog_Core1";
  w/ d( ]- k$ A( O: i. GDefaults.common$.logger = appLogger;
' G) `6 }6 L, X. l3 L5 k1 x" G% hMemory.defaultHeapSize = 0x8192;   
2 @5 d( f/ V: u: n- uIdle.idleFxns[0] = "&LEDStatus";# t( D' n% O$ M8 V0 q9 P5 W) _
Cache.initSize.l2Size = Cache.L2Size_32K;7 t) n- \  X/ T- ]

& ]+ q5 I5 c; O5 M1 h& H
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-27 09:22 , Processed in 0.044295 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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