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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
, p* X" x' Z1 L9 t% W& |' B+ y
) ~8 o: o2 G. C    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
' s1 V, Z& ~" G9 V; y
& d9 h. g8 U# W  L& q7 ~6 I其他程序段。。。。。
6 ]' n$ z7 O) p
) j* O0 K2 {5 ^+ i( Q   free(x_d);
+ f  n4 i# ]9 X, i6 T* t- U: |1 O. h; w9 e/ e; }) l8 R- j
使用DSP侧单独调试功能,验证动态申请没有问题,
9 p! H1 t- ?( C% i
) Y6 H9 `! o7 g! B但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
$ r( Y1 |7 x8 q  M
: Z% Z. H- n. |) E7 X5 g! I

0 r/ {3 O" x. E9 ^# @" ?( U; g, q% P

  X0 S" G( c( V4 X: l7 t* T- y9 J" B. }. m
; _7 ~  ^0 O0 a2 \9 Q

5 \+ B! E" h: j6 }. q* q/ v" E
1 C9 v. v5 q+ \: H) w8 F0 T' \5 ^" N
) Z; k% o& k7 E. z5 M, L; e' D% s9 e* B3 n3 c) Y
分享到:  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 */% c( Y' W+ Z9 H. X4 M; R
Program.heap = 0;/ [8 N0 ?$ t- @  Z0 Z
Program.argSize = 100;  /* minimum size */3 N) t& i2 z/ X- H6 c8 L: _/ C
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */1 e5 s& f4 k7 U
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  w5 F( v$ ^3 @8 A: k. {
var heapMemParams = new HeapMem.Params();7 L+ V: L0 L5 s3 g; H
heapMemParams.size = 0x4000;) r9 N9 V$ o" Z1 p
  d* S  m0 A6 s) J% x# z! i
var Memory = xdc.useModule('xdc.runtime.Memory');% M% s& k# S: C0 n; o; _2 E
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
' R" y- L! j, F: Q; O  H) j
) p7 q; W: L% L我大约calloc  每次共计大小为5K*16bits,, M% m6 ^0 {, u. |+ P+ t
而默认配置才0x4000、需要改大。  p6 p( [1 ]2 u! N& \( c6 Y
: e# n, f( Z9 U, X$ D2 S9 Q! M' }
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明2 ]5 ]( ^6 ?4 x7 |/ g  f& g
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下) V/ w- B. I# R) h5 @' D$ Y
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)% l. |0 H4 U' p& m8 M' p

' P& i" h' K6 N3 ^' Y2 t2 {是不是需要在DSP.CFG中进行配置% {) {' Q! n  c6 r) ]3 u
我现在的配置为, O# D# B$ R* f

; i5 f# S+ T  `+ ?! S! S# m/*' |; [% w) s: i: G" m
*  ======== Operating System Configuration ========
3 V6 ?$ ^1 Z6 J% |& j* y */; o+ \& i$ f' `5 I! ]' B, t" t

$ R' j& C5 W: O2 S/ S( X" F& q5 M7 s/* no rts heap */. E, Y. X2 F- }2 l' W
Program.heap = 0;; J* _; r* Y/ f& X  K" C
Program.argSize = 100;  /* minimum size */
* h  T+ N+ r7 i. c) SProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
. _8 [9 ?: E9 O( m) B2 }3 [3 g& J3 C/ |- D
/* create a default heap */+ v; h5 z3 L7 H
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 I3 f" c! R; H! N
var heapMemParams = new HeapMem.Params();. I6 I2 o! V. H2 H0 w8 i5 u6 d; p
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. e( O* O9 g( y7 j4 k% h
5 l: J- g' y, Q' n0 U- a
var Memory = xdc.useModule('xdc.runtime.Memory');( W9 R6 S0 N% d
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);4 _% i+ h! B% H- r
# w2 I6 C: x- ^/ M* \
/* configure System module */
. W, w+ F! I8 ~9 Qvar SysMin = xdc.useModule('xdc.runtime.SysMin');0 K: {1 h' m1 S% X7 ^" z
SysMin.bufSize = 0x1000;
) Y6 k7 z$ G6 y, u* LSysMin.flushAtExit = false;
* j$ L# e) r0 G& V, z' ?# [$ _# V# Q6 h1 |: A4 H
var System = xdc.useModule('xdc.runtime.System');
/ n0 Q  h& k$ SSystem.SupportProxy = SysMin;
5 U$ w/ A! x, o! K6 ]; h. [, G; O- y( W
/* configure SysBios to use the lower half of Timer 1 */# R3 u7 I9 @5 C5 h% I& }
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
$ _$ }4 F/ l( |var Clock = xdc.useModule('ti.sysbios.knl.Clock');: \/ a* f) g7 B- ]
Timer.timerSettings[1].master = true;
# `, f& o0 V. N) J  [Timer.defaultHalf = Timer.Half_LOWER;2 a" F7 |) X$ {  g# S8 p2 n
Clock.timerId = 1;
6 c% r6 Y6 e$ o! D: K2 Z2 `% i# H* p8 ^5 Z9 q

- t5 H' G. T$ I5 j) }# U$ h/*
9 w. r6 O+ ^8 [& H *  ======== Miscellaneous Configuration ========1 K9 x* r8 v. Z6 f% Z% ~) ~
*/
0 E$ F* p6 D$ O  a7 G% l) f8 f8 K/ g9 M# _" E+ Z
/* set default diags mask */! s1 D+ [& C1 O5 C' G
var Diags = xdc.useModule('xdc.runtime.Diags');1 u3 ~/ M+ S# {9 X" {& f; y
var Defaults = xdc.useModule('xdc.runtime.Defaults');
2 c. c& Z6 z) P/ U: d; D# q# V# V% Q0 A. {2 z2 m" s6 v9 w
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;4 q9 T' m* y# {, ]% U% X% K! T
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
: y% k) `+ t  S1 ~% X4 JDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
( v' J; h: G5 W, o' Q8 U  wDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  m. ~. `7 k2 d* y7 w6 F# V' M( O* N: C3 k8 DDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */9 |" b- s  m# J: W( |$ E
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
6 G/ ?2 p! V! Q% u% T0 lDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
7 `- W  c6 k9 m' s1 LDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
  ~; F- c  c1 e: W7 N: X6 g5 ]Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
* ~; p3 A  Y; \" L7 n" rDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;- ^6 v) k- e6 T" o' m
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;" U3 H% V7 W" \+ e
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;6 B- J1 R$ C/ v
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;7 S$ {3 [! f; f* J( h
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
3 _: k. C& E2 U# y% i
1 h; T5 j1 l6 z0 t" C/* override diags mask for selected modules */
/ F  H* D$ W& w/ |xdc.useModule('xdc.runtime.Main');8 J* P6 [3 H4 H" b9 u) x( @
Diags.setMaskMeta(3 n2 P' w) A: P9 q' y1 T- H
    "xdc.runtime.Main",
  h: [5 f* ^) f8 |    Diags.ENTRY | Diags.EXIT | Diags.INFO,
' j* C! W3 E8 l3 ^# C    Diags.RUNTIME_ON
* ?1 X7 a3 b3 e);) n1 _' j4 D1 L7 x4 V8 b

: b% a/ ~1 c( F# q4 [var Registry = xdc.useModule('xdc.runtime.Registry');) d7 C; d* e6 g% i, p6 t
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ R$ M- K0 Y5 K+ p; c
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;  M1 l- {6 h/ Y( X' N( _
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;* ^$ _2 A- R# O# H* o
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
5 w, M1 b# Y- q2 \) b# p. W1 g4 @# C& z( D5 W& A
/* create a logger instance */( z1 a% |: x# Q, G
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
9 `$ i6 }$ ^. b* _6 _, C# vvar loggerBufP = new LoggerBuf.Params();
0 _; c, n/ f2 R% z0 T& H7 ZloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
* v5 _9 ]- A3 b" IloggerBufP.bufType = LoggerBuf.BufType_FIXED;
1 }4 f6 m; B2 G  r& `
& Z. w; r9 O5 Z$ J2 G9 B! cvar appLogger = LoggerBuf.create(loggerBufP);; t9 q  _4 }3 d
appLogger.instance.name = "AppLog_Core1";
% i9 C* a, ?& |  g) J* ZDefaults.common$.logger = appLogger;" D& y+ c6 e# A; M; ?  E2 l
Memory.defaultHeapSize = 0x8192;    " s; ^8 K! O* o
Idle.idleFxns[0] = "&LEDStatus";, P% R9 b- Z# D0 u- T3 J. w  N6 u
Cache.initSize.l2Size = Cache.L2Size_32K;: |0 f' a6 `! z3 d0 l
  k7 n& q- y) A
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-22 12:03 , Processed in 0.040411 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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