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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
5 M- F  M2 Q( z' K7 M6 ^
$ N& i7 \. F' O3 |6 o; _+ G! W( f    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2564 m0 k& K3 I4 U6 @9 U' J. I
1 K% |0 ]" N) g4 t6 H, L8 t
其他程序段。。。。。
  M7 T* ~' x4 ?+ @# {  O# N & J7 u: I* I% W0 m- P' u
   free(x_d);9 M$ C3 j# J$ C, `) ]4 h
  w3 N5 C  _5 M
使用DSP侧单独调试功能,验证动态申请没有问题,
; d  ]( G2 L1 e% y* q
. E4 {$ w* A, ]$ W但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
8 V+ S; N2 j5 R' m4 Y- ~5 m
& ~" I# X$ B  A/ ^4 D! U

; s1 ]+ k$ S' ^( |# \1 P3 y/ w: u) N6 w2 k

% Y. j3 F* L+ W3 f  Z* @6 T/ t) v. [+ Z% D- x; B) h5 [# H

0 i2 }; c* E0 h5 d0 {/ m% C& H9 G
5 L; D8 H( S% m4 q) a5 b( I

. Q6 A0 n0 D5 V8 c/ T4 h, t% u3 X
) ^$ G/ r. B- I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
4 e2 [9 h7 R& n$ J5 N$ y我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下9 c4 K- [- J1 }) I  c
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)& k& d7 T' u" v

5 I# m2 q' K' O& ^6 Z" a1 e2 {是不是需要在DSP.CFG中进行配置; n% w, F4 e: }8 R- H/ z4 P$ q8 F
我现在的配置为
8 u' I3 l# f: a+ A2 u3 p3 i% ]  h9 S; x: ]5 z9 J, @. e
/*
/ a# D5 P! j# Z( W; k3 m* f *  ======== Operating System Configuration ========
9 U$ d9 G5 Y2 ~  O( G; N1 ? */) ~# ?5 X4 r* w

6 k) u* @! O# X9 `0 i9 x/* no rts heap */- D6 @  F, n3 y: q/ C3 @) D1 A9 L, _
Program.heap = 0;5 I% }( g0 y9 \3 P7 `2 O* l
Program.argSize = 100;  /* minimum size */
' ~9 p5 |& s3 s0 Q! gProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大+ [& ^- ~4 [5 [% R
. i5 J6 c2 m, Y# b5 o
/* create a default heap */
5 a- z. L( w% H& C9 Gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% A' x* A7 W" Q. b. w+ ^( t
var heapMemParams = new HeapMem.Params();
5 N. n- f! G/ n  qheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
2 _8 W: L* ]/ f$ |/ `" R8 \0 N# o/ @1 V* x
var Memory = xdc.useModule('xdc.runtime.Memory');
" @+ Q4 t) i/ e" x, W& IMemory.defaultHeapInstance = HeapMem.create(heapMemParams);( S7 j1 l5 C0 D7 d; k0 Y

! @# G3 D  z- H& m, r5 S4 P* K- m/* configure System module */1 A  K5 I% Z$ u
var SysMin = xdc.useModule('xdc.runtime.SysMin');+ O  Z) ~# a3 X
SysMin.bufSize = 0x1000;6 O& J' ^9 ^8 D# C3 Q6 I
SysMin.flushAtExit = false;: Q* K2 B  z; F. G: E+ `2 \
, H/ l& z' [/ o" ]3 U5 }
var System = xdc.useModule('xdc.runtime.System');  w2 }8 P$ R4 Q  D$ z
System.SupportProxy = SysMin;
$ @, c/ h, W7 h$ u5 }" h6 @- @1 W! U6 R2 P& d+ w; M' R
/* configure SysBios to use the lower half of Timer 1 */
, R3 c7 {3 |3 }% Q. ]var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');0 T. a% O- h- ~" b+ l+ c. q
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
3 p7 M. d  ]6 \/ ~6 ~# DTimer.timerSettings[1].master = true;; M& g' U/ ^  c9 P# G) q; _3 z( a
Timer.defaultHalf = Timer.Half_LOWER;, |; f/ ^# o: \: [/ H3 g
Clock.timerId = 1;3 v( K* ~) w9 f& t; ^! ]. p
0 E+ z; k: y# T( p: ^  ~* r6 h- S

9 J, z# j" \+ w/*
/ c! H; c' z1 i" m4 \ *  ======== Miscellaneous Configuration ========5 e  x) s) A0 g- o
*/- n7 q1 b' F/ a$ i
, }: j# R- n( U- E% C
/* set default diags mask */
5 X$ e, g8 f' N6 y( Z$ rvar Diags = xdc.useModule('xdc.runtime.Diags');
$ B6 n  B: j$ m* p- Fvar Defaults = xdc.useModule('xdc.runtime.Defaults');, {* T: U' I: R' T- F( Z, b

( G" t  d# _9 `" \Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;0 ]" P  \6 n* J$ j; V" j- H
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
! j2 A* c; n" F2 vDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;) f( E3 f( [9 H
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
* T) x& H) l9 w6 n; d6 @Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */; ]* i3 R  |4 C. F! x! e
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
& f0 z, W$ {5 i, A# ^& nDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
$ a# `- g8 [; e  U  |# D; g& h5 r$ bDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* Z0 g7 y$ v* }" A# ADefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;. ~5 K. k8 t0 z$ H" s
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;2 m( A7 I; }  G
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
5 t) X' S4 ~; a; N( z2 U  Y6 BDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
( o3 R  f5 W2 F6 F1 JDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
1 o  l9 b$ P+ ^" c- T# gDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;" ^. l- t# Q9 G3 n  M4 y4 l

, @9 T& K$ o' H3 Y5 l/* override diags mask for selected modules */- c$ Y! R; o0 k
xdc.useModule('xdc.runtime.Main');5 Y* r% `: k7 \
Diags.setMaskMeta(
- V+ E; V$ O4 n+ W* d: N5 ~! y. n    "xdc.runtime.Main",# w. i2 j% V) ^7 _1 E2 @
    Diags.ENTRY | Diags.EXIT | Diags.INFO,( K# a% `# ]0 A3 w  v6 h. y
    Diags.RUNTIME_ON8 g' Q: b5 r/ W8 C: @. Q- |7 \" C
);
, `  W8 d) l* q9 k: }
# v/ t+ d0 Q7 c1 kvar Registry = xdc.useModule('xdc.runtime.Registry');* {0 A) `+ I! Y8 w
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;$ H7 I: _, ]4 o' D; J" _9 O. E
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% J1 K1 j  H# a. e3 {4 z1 [3 ]% ORegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;* p6 U" \+ M$ O6 I7 \
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;* \! V% s$ v2 K: ]+ K; K6 Q- h
' |6 W* ^- D+ `& T
/* create a logger instance */
1 f2 y, x. V( Y; s( Q5 s- Zvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');% e6 `" U" ]+ V! [, r% Z
var loggerBufP = new LoggerBuf.Params();! L# n% _$ K. t  I
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 O; x5 B" ~# P9 c3 [9 N7 ]loggerBufP.bufType = LoggerBuf.BufType_FIXED;3 L* W7 l5 X+ Q( Y; A$ e5 @- K

( _7 |1 t0 E/ n1 ~6 v9 R6 m" qvar appLogger = LoggerBuf.create(loggerBufP);/ J5 ^% p& U9 y6 E5 P; r* x
appLogger.instance.name = "AppLog_Core1";3 q6 j: k( \; `; l
Defaults.common$.logger = appLogger;
( t, k# K2 k4 U6 [Memory.defaultHeapSize = 0x8192;    $ @: K8 H; Q. A
Idle.idleFxns[0] = "&LEDStatus";
1 R# T9 P0 J5 tCache.initSize.l2Size = Cache.L2Size_32K;
1 j4 y8 P' C0 Q$ o
; r0 k) L) h4 b, z) T" |0 P
回复 支持 反对

使用道具 举报

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 */
( R, |* c/ g9 ?* f, Yvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');3 }  o% c2 C/ I
var heapMemParams = new HeapMem.Params();) n8 T1 l0 o9 k! X
heapMemParams.size = 0x4000;" y' }  l2 X% \: H9 |
% y: b& Z2 t( h; O9 D5 _0 K
var Memory = xdc.useModule('xdc.runtime.Memory');
# k# \$ e3 W5 ^& R1 kMemory.defaultHeapInstance = HeapMem.create(heapMemParams);0 W' v$ ?8 v4 p$ C9 t9 Q( a* a. q, ~
! H* }- a6 k1 y. h2 ?5 I% K
我大约calloc  每次共计大小为5K*16bits,
6 l" F. ?+ }& d, d" K而默认配置才0x4000、需要改大。
, q0 _) E  I1 b6 c' A8 {9 X6 K- H! x) S- P
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
  }/ L  ?  [$ u; ~8 F, [( D8 S0 AProgram.heap = 0;
& t4 D$ K$ b$ A5 \9 S; mProgram.argSize = 100;  /* minimum size */6 k% l( t, M9 H6 E% e7 o
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-11 19:02 , Processed in 0.054150 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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