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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
! G7 x- z+ p! t* @. [+ S# j
" z9 t  Q7 ]: a5 E  Q    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
4 V: o$ c7 u7 ]3 Z( i$ g# s( N" M( ]/ z) X$ I$ ^* o
其他程序段。。。。。
$ g: s3 j6 L5 D
0 p" u$ a; a$ r) \( H! i   free(x_d);
! M$ B3 j7 _6 v+ G
" Z* L. X: p4 a+ s1 W使用DSP侧单独调试功能,验证动态申请没有问题,
$ P/ {) t9 m0 q9 M& m5 b7 v! c! o5 K) |! l  D& g/ `& g- [1 w6 ?5 i
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
& f9 d2 x  C( R7 Q+ @

- F1 a$ [0 A0 g2 K9 f% T
! n( j1 Z/ G( `) D9 A
2 G1 h+ X; o" C2 G
/ S# W# ?# }+ l! p$ O5 H
  j- k& \" R7 F% U+ `. U% D
" A' g, w  k' `$ C4 C: D4 P: `9 H' ?6 e  _

' l; R, o9 a& s( e* D% ^9 o( L' O
- N1 I6 B0 b( v0 d0 U/ L  {5 P$ |! }! K4 u
分享到:  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 */# Y2 v8 w3 P5 Y
Program.heap = 0;
3 j8 A3 R9 r; \' w. NProgram.argSize = 100;  /* minimum size */
6 }9 T- b& y$ u5 T2 AProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */4 S" S+ C2 G3 g# D/ n2 t: \
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& z( \0 @& \, z/ X, p- n5 |
var heapMemParams = new HeapMem.Params();) m5 n# W3 g% |4 G
heapMemParams.size = 0x4000;1 q% D  _/ w4 U( Q1 _

& h/ Z7 U' @* I$ J0 E7 fvar Memory = xdc.useModule('xdc.runtime.Memory');- c$ W/ c5 ]4 c  Y9 d: B
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
  q5 c! _) Y7 M
4 Y! j. u# ]# g5 T: A' |+ |5 s# Y  j我大约calloc  每次共计大小为5K*16bits,
& G/ U# Q8 o. U6 W而默认配置才0x4000、需要改大。
0 \) [& c1 ?1 _& P. F7 C# j# L0 a& E5 F6 P* U, Y. j
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
( W- H% {& r2 M我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下: s, F' q9 O# i, T6 ?- A* c
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- S3 J  G/ \! z0 D  S5 b- q
8 X2 J1 ^1 c- B# ~
是不是需要在DSP.CFG中进行配置
/ {7 D. V# l* K' B) s5 U6 t我现在的配置为7 B! ~( O$ _0 O: s* m

5 i+ M& {# m1 F2 z/ ?0 |/*
: V% \$ a) }* I3 f' ^0 J  I7 P1 f *  ======== Operating System Configuration ========
; ^  i3 R, N6 p1 c9 Q: G */
% F  z9 K* q/ J+ c
0 r) P) c" H* x3 R) c. k: `/* no rts heap */
0 Z% u4 R8 v) J5 Y5 W" I1 H0 L, o' mProgram.heap = 0;6 }4 w8 b8 A7 R6 i' t2 w# o' S
Program.argSize = 100;  /* minimum size */; R2 k% O5 W! ?% {$ T) }. t# z- q0 ?
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
( L! j5 U, o" y- D; t+ u3 f8 |. x# ^8 d) B" L2 X
/* create a default heap */8 v5 |6 ^  L- X- c& s- K
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');5 j( h# J  k0 E! O# g2 p
var heapMemParams = new HeapMem.Params();) u, m! M6 F. L4 ?
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大1 A8 H+ ~6 ?5 \! g+ g
0 k$ T& M' P% t$ N, V9 U) ?" g! u
var Memory = xdc.useModule('xdc.runtime.Memory');
* l( v0 U) C- |5 h6 A5 y7 @+ ?- BMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
, k5 t. \1 w0 ]8 f* ?" I9 @2 a4 v8 q7 p% U- Z6 t5 [! \; X
/* configure System module */
" O) Z$ _3 o( k8 G9 uvar SysMin = xdc.useModule('xdc.runtime.SysMin');4 Q! f. U7 d8 [7 J% U
SysMin.bufSize = 0x1000;' ]+ S9 ^9 m0 Q7 e- n7 S. l4 ^
SysMin.flushAtExit = false;& W- B1 f( ?. o% n
5 \" W' F/ s: y& ~" [, `/ F
var System = xdc.useModule('xdc.runtime.System');
( E& y1 [( X$ o6 T  C& l3 D5 xSystem.SupportProxy = SysMin;
1 g4 p1 a  U, @  P6 d" ~' e* h9 R
/* configure SysBios to use the lower half of Timer 1 */2 c4 F  ~; D# F
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');+ S( |5 i& A3 s3 m) C( _4 Y
var Clock = xdc.useModule('ti.sysbios.knl.Clock');) s+ t/ l0 y) I! i' J( d2 g- Z
Timer.timerSettings[1].master = true;
! M& a" T( v7 q/ K5 K4 l/ `Timer.defaultHalf = Timer.Half_LOWER;
5 f; c0 m% W5 K: r5 EClock.timerId = 1;
9 G# H) e6 {! x' i7 _7 C/ w. G
' j# p1 C; l0 L! v* J  r" s$ Y3 l3 Q# i% E
/*+ W6 \7 b1 K1 p
*  ======== Miscellaneous Configuration ========
9 U0 \$ K  @. p5 b8 B */
$ B8 H7 P" x+ c( b/ q) I! Z7 e4 M# W' l
/* set default diags mask */, P% ^3 D2 a8 |! g5 Z
var Diags = xdc.useModule('xdc.runtime.Diags');
' Y- O" [5 C, a5 Y  \6 J1 kvar Defaults = xdc.useModule('xdc.runtime.Defaults');& l( c- @- B# ?- c

* A: M( p/ m+ {1 @' LDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;# r( z9 [+ E  T! ~" Z- {
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
' ^  F7 D2 J0 ~3 v& YDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
9 P5 _! l0 n/ s1 \( j: z& |Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* P( g! i3 l; J4 S$ T
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */9 c! X; y8 e" n! u9 X# Z& z+ g4 i
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 s6 ?! W+ c  k, b
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
; P% P6 m! q8 ]$ _8 K" {+ IDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
, X) W) T- s$ }* p1 K2 eDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
  h! ?6 o' K2 ]7 aDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
% _: @' w" s9 }- G( ~" lDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
4 a: G. q) D' _& Y$ h! `2 T! cDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
$ [& c' R5 d# e2 W# ]Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
; n* a6 h/ B1 @& P, b: \Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;& n) U$ r7 f0 _* P+ d

( i# C4 z( ]' @$ g8 L1 j* O6 T7 {/* override diags mask for selected modules */- O6 E# H4 f+ e8 |! r. X4 s: R4 \" ~
xdc.useModule('xdc.runtime.Main');/ b, _# S! S, `, ^
Diags.setMaskMeta(
( E. C" K  E: w3 Z+ q    "xdc.runtime.Main",* h6 p/ j* @  [/ }6 K4 J
    Diags.ENTRY | Diags.EXIT | Diags.INFO,0 e- c' h6 K+ k6 T. Y( g* {
    Diags.RUNTIME_ON
. o) a! U6 o# R# U4 |) K  @" G9 U);( z6 n2 t8 P2 R0 A1 D  S2 f. c6 ^

/ A) f" r0 J' ]var Registry = xdc.useModule('xdc.runtime.Registry');
& i5 P0 F: \+ o/ l: rRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;; a  w: O, j  S0 d
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
2 ?+ t) \* e7 X' wRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;, k( T4 r3 W, T
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
$ v# p) C  q  }# z$ M7 q+ A0 @% T: |* O7 W
/* create a logger instance */
  q0 H* K* ?% i4 {1 svar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; ?* I( I8 x1 yvar loggerBufP = new LoggerBuf.Params();* h  p! W9 v$ C. \
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */& {* M& ^9 u4 _7 F) j
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
4 g& D$ j0 ^. ~9 x  f0 Z( z3 D0 o+ Q
var appLogger = LoggerBuf.create(loggerBufP);
) ?% \+ [- R: o2 aappLogger.instance.name = "AppLog_Core1";
' O8 ?. {1 B5 i. `% ^1 @: V# m# qDefaults.common$.logger = appLogger;  o$ w# z3 O+ Y; c
Memory.defaultHeapSize = 0x8192;   
' W# _2 u9 L4 X! gIdle.idleFxns[0] = "&LEDStatus";; {/ R8 t2 h0 c+ g
Cache.initSize.l2Size = Cache.L2Size_32K;
& b+ X6 h" ]  p+ j8 A# I/ B. c, ^* Q  I! \
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-10 03:03 , Processed in 0.052102 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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