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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
6 C: m7 n6 G" w+ B
/ p, C1 d9 h+ t! P5 Z    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256, i4 X. b/ n: `( H- w) T
2 j, S6 f, e4 Y) u; K. Z& M, n
其他程序段。。。。。
2 M) C: ?0 w) ]. D/ v6 y
4 @8 P- [1 @! M   free(x_d);
) s+ n7 c* R& W" ]& k0 e' a' v8 ~" f, h3 N% H  j  Y0 d) K
使用DSP侧单独调试功能,验证动态申请没有问题,/ L* b6 _2 m( s& U; m
+ _* M' W1 S' Z. s; u) ~
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ R# \# I; m7 J0 i6 M

- M0 e- Q) H, g( r; h  n/ B7 v$ f$ N% u7 q9 j, B- r" r
% G( c  m# E% B. z
) F" {- F+ r' J8 U, Z& U: a
) K% W# V% h- `+ l

4 b' t4 j  S) M. G; i, K5 D& u0 e' c5 U. u4 z
4 g& M6 R1 T  n& F7 ~2 I

, h% B3 o2 B' |. h
% ?% c% \  p8 x1 b5 H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明7 l; W% @# {7 ]5 }
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下/ G0 S2 o) c$ C
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
! S, G4 k. f7 ]) b7 k; ?
8 z8 E. J) ^8 Q. F! y- ]! d
是不是需要在DSP.CFG中进行配置
% Y  [% `9 b- Q' w我现在的配置为
  c3 X3 d% k. s5 s
' Z1 ^4 {. u7 i$ a( m, @/*
6 a- h5 y+ U' e/ }: \. F/ _ *  ======== Operating System Configuration ========' Y7 a8 c: V+ Z/ p* d, }0 k+ [
*/9 r  a& W, v" W# ?9 f- j8 |; Y' u& f) A
: A$ l( H2 a& a7 J
/* no rts heap */; u8 S' `' C9 d1 \
Program.heap = 0;' N" `. M7 G/ e% N/ n
Program.argSize = 100;  /* minimum size */
; Q2 L7 y  z3 \Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
9 ?) Z  k# }+ \  `1 E" @7 u) k1 |9 l/ U' g! d9 m+ [/ n8 v% K# R
/* create a default heap */' R5 k* T& r: K/ U) J: s6 v( g2 o
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 b+ S* w, x) _) [: @. O( Ivar heapMemParams = new HeapMem.Params();
% L$ E/ L1 G9 G$ {" s. s; `heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
: ^$ f4 D/ Y% ^0 G0 j3 \2 e! z  C( j0 m8 E7 z2 D
var Memory = xdc.useModule('xdc.runtime.Memory');
& k7 V8 H9 z6 u! h( q$ U. mMemory.defaultHeapInstance = HeapMem.create(heapMemParams);, A9 S" O3 p3 \2 }

6 ^$ ^8 `# ]( b  n9 r4 E' c/* configure System module */" [( H, j5 N, V: B
var SysMin = xdc.useModule('xdc.runtime.SysMin');  t' C! P* }8 v2 q$ Z2 C
SysMin.bufSize = 0x1000;0 j3 M0 q! x  A5 m# i
SysMin.flushAtExit = false;
: c# A% ]7 ]  t: w  G7 H* l; }5 O
$ u5 c; D+ n$ x  Ivar System = xdc.useModule('xdc.runtime.System');
  T( w/ K7 Q" p8 n) W8 Q  BSystem.SupportProxy = SysMin;
$ P: E% H+ w1 G$ G5 q
# P! X4 H5 M3 Q- p. M& Y$ w/* configure SysBios to use the lower half of Timer 1 */7 T" `! h% M& c" U
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
/ s* X" C  Y1 m2 q7 b0 |+ Wvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
; z1 P( k8 f$ N: E% i5 [; T# fTimer.timerSettings[1].master = true;
8 ~9 y- P$ \, V" k2 a& _' E* kTimer.defaultHalf = Timer.Half_LOWER;# A% l; y- K9 {8 B9 c$ R" e8 ^
Clock.timerId = 1;/ I  x5 K1 h, O" F
; k  @1 _0 G- f0 A, T# X; x6 x! _( e

* d! U% R; l) I! q, x2 j/*
* M* Y2 ^: S' S+ V3 {0 Q5 f *  ======== Miscellaneous Configuration ========
$ B  s, r; z# C9 H. b */( g! N" X0 w; e6 K; N8 u* \; F9 W
3 X1 V  ]; D. n* L5 d
/* set default diags mask */( o0 q  ~8 k; S
var Diags = xdc.useModule('xdc.runtime.Diags');/ ]$ w- W5 J- @7 [8 J
var Defaults = xdc.useModule('xdc.runtime.Defaults');& M6 K3 `  ^$ n  o: ~

8 F( T' B! n+ K2 y2 C7 O$ ]Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;$ W0 |+ E+ P+ a: v8 i8 J4 K) g
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
; E. P* c: Q( j* I. A1 Q1 M4 YDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;' [  a4 R5 j! i7 N1 T- P
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */) ~1 T$ N( x6 l2 }' E9 c6 D) h
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 h1 x# `- @  a" ~, [* T0 Q" EDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;* l& p- w4 o9 O7 G4 S) n( j& C
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;4 Z; Q3 a3 t# u! d
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;  M# c8 s+ x8 z$ M. D0 [$ p* D6 o
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;6 S1 k, W$ s# W1 {7 S* L
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;' Y$ i& f3 `+ C) y" [% q
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;( x/ ?- \9 k8 w5 b& O, O) C; _
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
5 Y# T$ O- e; z+ [$ x! ]Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
' {* b, @2 h3 m# A8 n! s( ?  eDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;& [" n! X$ ~/ f1 R$ ]% F
( J& g* g+ o3 _
/* override diags mask for selected modules */
3 Z3 \) K6 m; H# H. q3 P7 Dxdc.useModule('xdc.runtime.Main');/ W: R8 Z6 V5 s) m# f
Diags.setMaskMeta(
- |# r! ~6 T6 D& {( |    "xdc.runtime.Main",: }8 Y4 u. B6 E2 R" N2 H& I
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
) f% p$ _) m, c& S    Diags.RUNTIME_ON4 V) c+ R) r' X6 g! _1 r) ~
);/ z6 {! j" h+ H, u* K( @

" P, c" g/ r+ N5 B* Y+ h+ |var Registry = xdc.useModule('xdc.runtime.Registry');5 F' t' c( D9 ?5 M8 [
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;; u4 A$ w: g+ y) R4 D
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
# j$ Y! h; P9 ?- S  X/ {3 cRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
$ N; O/ S1 R0 |Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;4 o$ l4 l1 C' b+ N' F6 \
4 C& S) m7 b8 ~$ O
/* create a logger instance */
3 E: \" y# ~3 M9 q+ U/ `, Pvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');/ I  p# s1 ^' x" [0 z
var loggerBufP = new LoggerBuf.Params();
9 g  i& Y- O0 q! ologgerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */1 Q6 }1 \, D3 [0 U7 C8 J: {
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
' b' \; g+ {% M- x8 |- ]4 o
) b0 @# Z( |2 v+ ], Hvar appLogger = LoggerBuf.create(loggerBufP);
4 e6 @+ a* a2 t0 L; p4 e, YappLogger.instance.name = "AppLog_Core1";6 d! |. Q1 ~2 A$ X6 |
Defaults.common$.logger = appLogger;3 P% K# y4 m7 |4 \1 @0 ?
Memory.defaultHeapSize = 0x8192;    - V. s8 M2 B. Z2 j( y: W" @3 k& @
Idle.idleFxns[0] = "&LEDStatus";0 K! N% @2 C( @( \2 N1 a
Cache.initSize.l2Size = Cache.L2Size_32K;2 Q9 y! k& F' [& {6 W6 c' Q
; n7 \" k3 A; }
回复 支持 反对

使用道具 举报

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( E0 W$ D* H* K5 D+ H9 f
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');+ S3 k2 f9 g1 m
var heapMemParams = new HeapMem.Params();7 `+ V7 l( x( A: e
heapMemParams.size = 0x4000;
( C. `$ A; P5 c- P
3 h' i' \* a) b9 Y% |+ X1 ~2 Avar Memory = xdc.useModule('xdc.runtime.Memory');% o! [4 S: T# j$ d& K5 u
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);6 U; u4 \+ l& X* b* v+ }* |$ u: X
4 `  v& o/ J9 `/ u
我大约calloc  每次共计大小为5K*16bits,
% V1 y) O+ W( d4 `% P0 ^$ Z而默认配置才0x4000、需要改大。
6 E  F( B4 x) a4 j0 Q: ?, M! Q0 \. |% J7 d/ A* d, A
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */, {, o5 i( _- |' {
Program.heap = 0;
0 e' l9 E5 {2 l2 GProgram.argSize = 100;  /* minimum size */+ v2 A5 y9 z" @( J& e6 H, B
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-13 22:07 , Processed in 0.039757 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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