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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构, g, [0 ~) c) u  n' ~. w# R

' _4 |/ k9 O5 X# q    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
3 T4 q6 q) T0 n+ T, T5 h6 z) _( Y# k4 w2 v
其他程序段。。。。。
( N. X) t+ A) T& z
$ F+ `3 v& ~% r5 e   free(x_d);. X$ N; W8 |7 }7 `0 l$ |+ H1 H

. y. r: ]2 \* E" b! i  v+ X6 r使用DSP侧单独调试功能,验证动态申请没有问题,
5 F4 J5 _0 k$ ^$ r3 D
! d- A! g+ F. V, v但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
' t6 Q8 r( D, }5 A  o! Q: F8 R
% H1 L& F- d3 a' T- a

+ I, p5 M. x* e1 @4 \' l3 J. r, M( K2 A4 n
7 B/ ^3 N' p; L2 Q5 C2 t
. h+ M7 V2 W- Q  p8 d- F+ |2 ^
! k8 f, A6 S% U# z8 a( ?3 j" j! A
/ Q2 v1 ^# |1 k

9 a- e3 V/ p: u) R6 L; M4 v. k" T$ ?* w0 Q% J- {" v

. b4 a2 \, l& s) M4 T1 g
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, I) Z* b4 s& v0 d' z' B! {
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
8 |/ s5 W* q+ h, ]; v(不过疑惑的是,为何单独DSP仿真就没有问题呢?)" a) B% ]7 d; P: v" U1 f9 ]

( p2 m0 y  G0 K& ?是不是需要在DSP.CFG中进行配置: y/ A, R6 h0 h& y: y
我现在的配置为* T4 Z) d, n4 a, z" g* R5 \

" d/ n, @: W& W) c/*
' n/ h- q7 m" Y$ N8 G' c; W2 E *  ======== Operating System Configuration ========
+ g. ?. d8 H* B3 w) @% l9 a# h4 K */
) l- b3 f: m0 Q( m' D& g
! ~+ r, G+ I0 a! K% n8 s2 P9 c1 N/* no rts heap */
# L5 H8 {: E8 W8 j1 Y9 i6 ?0 i4 RProgram.heap = 0;
2 o+ f( W- T( h1 C: T" `8 |2 C) JProgram.argSize = 100;  /* minimum size */& I0 s0 Q) P: e+ f* V8 B
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大4 k5 w" k- I! G( H! ?) I* L" F
' b$ c& T2 S+ v' k8 O
/* create a default heap */
! Y6 \% v8 ~* a. h: B8 Vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% \3 M# v6 `' V7 lvar heapMemParams = new HeapMem.Params();
9 N: t7 ^) Z9 l4 c* ?7 c1 G0 [1 VheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( ?) N; P/ S* E" V' Q( M
8 p  a" c: e9 N. [1 q
var Memory = xdc.useModule('xdc.runtime.Memory');
# E2 n$ d/ a* \& \/ i2 wMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
7 v( j+ R' m' J" `: s* z% q; T) R) p$ K% A3 i
/* configure System module */
; n+ [7 Q( u) E2 s& P# Qvar SysMin = xdc.useModule('xdc.runtime.SysMin');# `/ ^& D4 ]6 C) Q4 q- G5 j
SysMin.bufSize = 0x1000;) t" b8 {0 m3 z
SysMin.flushAtExit = false;
6 Z/ k. Q& X9 P, n5 i3 n, ]) _/ B2 V8 ^) [  T8 J
var System = xdc.useModule('xdc.runtime.System');
# F. {1 L6 W7 l* k, A0 tSystem.SupportProxy = SysMin;5 }6 \: X  N4 B, d2 l9 S
6 o/ M. U1 {; [! }5 H" L
/* configure SysBios to use the lower half of Timer 1 */' L; y( ~1 y2 O
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');! D8 y, D! O& y6 R9 [& r
var Clock = xdc.useModule('ti.sysbios.knl.Clock');. }; w$ b: H9 V7 w) n# h
Timer.timerSettings[1].master = true;' n4 V2 W, p% K% E' o$ g5 ]; i
Timer.defaultHalf = Timer.Half_LOWER;$ _* I7 M* d1 _. D
Clock.timerId = 1;
. b! s* ^. H3 ]8 r3 X+ w9 _( z7 }+ ^7 |; A& w; Q2 H' R' v" E

. G$ t3 E" ]% }4 D8 P/*
' T& f. l! |( z  T, J( u$ } *  ======== Miscellaneous Configuration ========( T8 O, j( V. {$ Y2 q
*/. {% p0 \. \2 k: Y
' z0 {" m+ {9 I( M
/* set default diags mask *// C0 U& B9 {; g* W5 i- d
var Diags = xdc.useModule('xdc.runtime.Diags');
5 h* \! N* Q/ o8 |var Defaults = xdc.useModule('xdc.runtime.Defaults');
- k- K6 i: Z5 b2 X" D7 ]& ]& Y5 |& m5 x7 ~$ M
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
8 J2 i- a! `. A; ^( I' X6 `0 oDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;* _0 r8 I( j# y: V, w
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;& N. h# w& H* S- e9 Z" j: d
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */- U' U" i5 p4 b5 R. ]0 _! w& T
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
& v* {) t" q, w% lDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
8 _7 n9 o& u3 q% H8 p! IDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
! E: z6 q/ H; u+ b% vDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;! r# C5 k; T: l
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
4 b/ L6 q  S" W) n% gDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;6 }' F+ ~1 g: ~  |5 w8 Y$ |
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
+ U( |6 p1 [1 B. n/ }: ^Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;/ z3 W5 v7 [* S  Z. q/ W; {
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
, l* E: ?# B5 Y; F; N! jDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
4 Y" H+ y2 c" T" `) w0 b, ?+ |% T& B/ V+ p3 k# T5 J6 z" q
/* override diags mask for selected modules */* }2 K: _3 L9 d2 v
xdc.useModule('xdc.runtime.Main');+ ]  D9 P+ o8 S& {
Diags.setMaskMeta(4 \' M+ k0 b) X; l
    "xdc.runtime.Main",
5 Z% e# ]1 i$ {- J( k    Diags.ENTRY | Diags.EXIT | Diags.INFO,) K! g. w" s# M* r# ]
    Diags.RUNTIME_ON3 v" ~# ?# |1 d. Z! W3 d, {! w
);/ z5 E; T+ t- d3 _+ C

# t/ m! K( ]; K% ovar Registry = xdc.useModule('xdc.runtime.Registry');
: J$ [1 l5 D, E/ GRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
! Z3 A8 a5 ]2 }+ a5 XRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;6 v9 b+ ~0 o9 O% q& m, \
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;' T4 u. K+ l1 k2 L% G6 [
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
3 m* j2 D6 P5 t) o6 m9 `4 [4 l- n5 |0 D8 x
/* create a logger instance */
, w- N3 L  W  Q' _" f, p1 ?var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');4 N/ J: J0 o+ |. @! J' u) `
var loggerBufP = new LoggerBuf.Params();
+ B8 i5 r/ w8 z$ SloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */4 B0 B& x6 ]/ Q
loggerBufP.bufType = LoggerBuf.BufType_FIXED;( W: x9 O7 P0 |; V

- g2 f  m1 r' u) w0 p6 ^, y7 i1 Cvar appLogger = LoggerBuf.create(loggerBufP);9 \' C' H2 D! O5 B% u
appLogger.instance.name = "AppLog_Core1";5 U  R( x2 m7 F3 e6 U
Defaults.common$.logger = appLogger;
2 A  w* d( S# VMemory.defaultHeapSize = 0x8192;    % R. c& i) t! Q& f3 T
Idle.idleFxns[0] = "&LEDStatus";9 L3 B; u; T# O
Cache.initSize.l2Size = Cache.L2Size_32K;, a5 T) X  k* ]; e2 J0 ]) ^2 q
! k0 X! y6 V: p3 }
回复 支持 反对

使用道具 举报

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 */
9 Z  y0 d. \; Z/ S: i4 O) V: X& Mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ G4 j0 \% U& ~4 t
var heapMemParams = new HeapMem.Params();
" Q- ]3 q" b5 g" ?* R) HheapMemParams.size = 0x4000;
7 O, O: |' t2 A3 I% m
2 ?( f  `. h0 _& i) ?: Lvar Memory = xdc.useModule('xdc.runtime.Memory');
; H. _8 h. G8 A1 ^* eMemory.defaultHeapInstance = HeapMem.create(heapMemParams);' Y$ O1 e0 [2 {) X+ m
! @" h( f' A5 C: a/ N$ ?# l9 }' b! H
我大约calloc  每次共计大小为5K*16bits,
* W: V. c: ^+ K, f% ~5 v而默认配置才0x4000、需要改大。+ p$ w5 M  ]& ^& A) ]5 O

$ L( v. A9 N3 |# l
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */0 t' S& V8 i: ]8 `, v! X1 N
Program.heap = 0;. b4 Q7 _1 e, X" X3 I5 @# w
Program.argSize = 100;  /* minimum size */
: x& k2 J% n; Z+ F5 UProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-22 06:59 , Processed in 0.041906 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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